JavaScript数据结构-15.二叉树
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>二叉查找树</title>
</head>
<body>
<script>
function Node(data,left,right){
this.data = data;
this.left = left;
this.right = right;
this.show = show;
} function show(){
return this.data;
} function BST(){
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;
}
function insert(data){
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;
}
var obj = new BST();
obj.insert(15);
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数据结构-15.二叉树的更多相关文章
- JavaScript数据结构-16.二叉树计数
<!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数据结构与算法(第八章)—— 树
之前介绍了一些顺序数据结构,介绍的第一个非顺序数据结构是散列表.本章才会学习另一种非顺序数据结构--树,它对于存储需要快速寻找的数据非常有用. 本章内容 树的相关术语 创建树数据结构 树的遍历 添加和 ...
随机推荐
- C#基础入门 五
C#基础入门 五 递归 递归调用:一个方法直接或间接地调用了它本身,就称为方法的递归调用. 递归方法:在方法体内调用该方法本身. 递归示例 public long Fib(int n) { if(n= ...
- 个人项目-词频统计(语言:C++)
词频统计 (个人项目) 要求 (1). 实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词(4字符以上含4字符)的出现频率. 附加要求:读入一段文本文件,统计该文本文件中单词的频率. (2) ...
- nancy 中的json问题
按源码中的实例 来测试 测试地址 http://localhost:55581/restApi/secure/?ApiKey=15c6b59b-fd96-43ad-99d2-7f394f99272 ...
- jmeter分布式环境
搭建jmeter分布式环境 (1)确定分布式结构,即1台机器部署master.几台机器部署slave? (2)将相同版本的jmeter分别拷贝到这几台机器 (3)修改maste ...
- Android应用安全解决方案
Apk安全解决方案 背景 公司为政府做的App开发完了,需要上一些手段保证安全.这样客户才放心嘛. 防止第三方反编译篡改应用,防止数据隐私泄露,防止二次打包欺骗用户. 目录 Apk安全解决方案 背景 ...
- c#复习提纲
c#零碎整理 注:本文中大部分图片来自老师的PPT,感谢邵老师!文中所有内容为自己按照PPT整理,欢迎指正! 标识符 标识符(类名.变量名.方法名.表空间名等) 大小写敏感 正则表达式 小括号(组合 ...
- textarea 高度自动
<textarea id="suggest" type="text" name="suggest" class="form- ...
- java的堆,栈,静态代码区 详解
面试中,有家公司做数据库开发的,对内存要求比较高,考到了这个 一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方— ...
- SpringMvc渲染视图
这篇博文讨论的问题是从ModelAndView如何渲染到页面. 首先要知道每个请求处理完之后都会返回一个ModelAndView对象. 这里我分6种情况来分析,代表6种返回类型: ModelAndVi ...
- ORACLE Sequence 自增长
Sequence是数据库系统按照一定规则自动增加的数字序列.这个序列一般作为代理主键(因为不会重复),没有其他任何意义. Sequence是数据库系统的特性,有的数据库有Sequence,有的没有.比 ...