JavaScript数据结构-16.二叉树计数
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>二叉查找树计数</title>
</head>
<body>
<script>
function Node(data,left,right){
this.data = data;
this.count = 1;
this.left = left;
this.right = right;
this.show = show;
} function show(){
return this.data;
} function BST(){
this.update = update;
this.root = null;
this.insert = insert;
this.inOrder = inOrder;
this.preOrder = preOrder;
this.postOrder = postOrder;
this.getMin = getMin;
this.getMax = getMax;
this.find = find;
this.remove = remove;
} //不存在存进去 存在计数加1
function insert(data){
if(this.find(data)){
this.find(data).count++;
return 2;
}
var n = new Node(data,null,null);
if(this.root == null ){
this.root = n;
console.log(this.root,"insert");
}else{
var current = this.root;
var parent;
while(true){
parent = current;
if(data < current.data){
current = current.left; if(current == null ){
parent.left = n;
break;
}
}else{
current = current.right;
if(current == null ){
parent.right = n;
break;
}
}
}
}
}
//中序遍历
function inOrder(node){
if(node !=null){
inOrder(node.left);
console.log(node.show(),"zhongxu")
inOrder(node.right);
}
}
//先序遍历
function preOrder(node){
if(node !=null){
console.log(node.show());
preOrder(node.left);
preOrder(node.right);
}
} //后序遍历
function postOrder(node){
if(node != null){
postOrder(node.left);
postOrder(node.right);
console.log(node.show());
}
}
// 查找最小值
function getMin(){
var current = this.root;
while (current.left != null){
current = current.left;
}
return current.data;
}
//查找最大值
function getMax(){
var current = this.root;
while(current.right != null){
current = current.right;
}
return current.data;
} //查找给定值
function find(data){
var current = this.root;
while(current != null){
if(data == current.data){
return current;
}else if(data>current.data){
current = current.right;
}else{
current = current.left;
}
}
return null;
} //删除节点 function remove(data){
root = removeNode(this.root,data);
}
function removeNode(node,data){
if(node == null){
return null;
}
if(data == node.data){
//没有子节点的节点
if(node.left == null && node.right == null){
return null;
}
//没有左子节点
if(node.left == null){
return node.right;
}
//没有右子节点
if(node.right == null){
return node.left;
}
//有两个子节点的节点
var temp = getSmall(node.right);
node.data = temp.data;
node.right = removeNode(node.right,temp.data);
return node;
}else if(data < node.data){
node.left = removeNode(node.left,data);
return node;
}else{
node.right = removeNode(node.right,data);
return node;
}
}
//获取最小值
function getSmall(node){
console.log("123456")
if(node.left ==null && node.right == null ){
return node;
}
while(node.left !=null ){
node = node.left;
}
return node;
} //更新计数
function update(data){
var grade = this.find(data);
grade.count++;
return grade;
}
var obj = new BST();
obj.insert(15);
obj.insert(22);
console.log(obj.insert(22),"计数");
obj.insert(9);
obj.insert(30);
obj.inOrder(obj.root);
obj.preOrder(obj.root);
obj.postOrder(obj.root);
console.log(obj.getMin(),"最小值");
console.log(obj.getMax(),"最大值"); console.log(obj.find(22)); obj.remove(15);
obj.inOrder(obj.root);
</script>
</body>
</html>
JavaScript数据结构-16.二叉树计数的更多相关文章
- JavaScript数据结构-15.二叉树
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- javascript数据结构与算法-- 二叉树
javascript数据结构与算法-- 二叉树 树是计算机科学中经常用到的一种数据结构.树是一种非线性的数据结构,以分成的方式存储数据,树被用来存储具有层级关系的数据,比如文件系统的文件,树还被用来存 ...
- javascript数据结构与算法---二叉树(删除节点)
javascript数据结构与算法---二叉树(删除节点) function Node(data,left,right) { this.data = data; this.left = left; t ...
- javascript数据结构与算法---二叉树(查找最小值、最大值、给定值)
javascript数据结构与算法---二叉树(查找最小值.最大值.给定值) function Node(data,left,right) { this.data = data; this.left ...
- javascript数据结构与算法--二叉树遍历(后序)
javascript数据结构与算法--二叉树遍历(后序) 后序遍历先访问叶子节点,从左子树到右子树,再到根节点. /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * * * */ ...
- javascript数据结构与算法--二叉树遍历(先序)
javascript数据结构与算法--二叉树遍历(先序) 先序遍历先访问根节点, 然后以同样方式访问左子树和右子树 代码如下: /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * ...
- javascript数据结构与算法--二叉树遍历(中序)
javascript数据结构与算法--二叉树遍历(中序) 中序遍历按照节点上的键值,以升序访问BST上的所有节点 代码如下: /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * ...
- javascript数据结构与算法--二叉树(插入节点、生成二叉树)
javascript数据结构与算法-- 插入节点.生成二叉树 二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * * ...
- JavaScript 数据结构与算法之美 - 桶排序、计数排序、基数排序
1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算 ...
随机推荐
- leancloud 云引擎
可以部署网站的云端,云代码的升级版.
- Mahout学习资料
Apache Mahout 简介 http://www.ibm.com/developerworks/cn/java/j-mahout/ 从源代码剖析Mahout推荐引擎 http://blog.fe ...
- Selenium窗口切换-----Selenium快速入门(六)
有时候,我们打开多个窗口,进行多窗口操作,那么窗口间该如何切换呢? 切换的方法有两个,一个是通过窗口标题来验证,另一个是通过窗口特定的内容来验证,这两个方法都要求得到的标题或内容是唯一的. 用到的相关 ...
- leetcode 罗马数字转整数
罗马数字包含以下七种字符:I,V,X,L,C,D 和M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做II ,即为两个并列的 1.1 ...
- roadflow asp.net工作流自定义表单
在roadflow表单设计器不能满足很复杂的业务需求的时候,可以采用自定义表单(即表单页面自己做). 自定义表单就是自己写一个页面,包含控制器视图,然后将这个页面挂到流程上进行审批. 自定义表单分为以 ...
- cesium编程入门(五)绘制形状
通过Entity添加形状 先来看一个添加立方体的例子 var viewer = new Cesium.Viewer('cesiumContainer'); var redBox = **viewer. ...
- 【题解】 UVa11210 Chinese Mahjong
pdf传送门 直接模拟+搜索,考虑一下选哪一个是将,然后搜出顺子和刻子,最后判断一下可不可行就好了! #include<stdio.h> #include<string.h> ...
- uploadPreview 上传图片前预览 IE9 索引无效的问题
最近公司的项目用到比较多的上传图片的操作,所以用到了基于jquery的上传前预览的插件 uploadPreview ,后来测试的时候发现在IE9下报索引无效的问题. 异常的产生方式 放一个file控件 ...
- k8s 入门系列之集群安装篇
关于kubernetes组件的详解介绍,请阅读上一篇文章<k8s入门系列之介绍篇> Kubernetes集群安装部署 •Kubernetes集群组件: - etcd 一个高可用的K/V键值 ...
- mysql--对行(表中数据)的增删改查
一.插入数据(增加)insert 1.插入数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n); #指定字段来插入数据,插 ...