二叉查找树
2016-07-12 18:03
190 查看
// 实现二叉查找树 function BinaryTree() { this.root = null; this.node = function (value) {return {value: value, left: null, right: null}}; this.add = function (value) { if (this.root === null) { this.root = this.node(value); } else { var current = this.root; var parent; while (true) { parent = current; if (value < current.value) { current = current.left; if (current === null) { parent.left = this.node(value); break; } } else { current = current.right; if (current === null) { parent.right = this.node(value); break; } } } } }; } // 遍历查找,从左到右 function inOrder(node) { if (node !== null) { inOrder(node.left); inOrder(node.right); } } // 查找最小值 function getMin(node) { while (node.left !== null) { node = node.left; } return node.value; } // 查找最大值 function getMax(node) { while (node.right !== null) { node = node.right; } return node.value; } // 查找指定值 function find(node, value) { while (node !== null) { if (value === node.value) { return true; } else { node = value < node.value ? node.left : node.right; } } return false; } // 删除节点 function remove(node, value, type) { if (node === null) return null; if (value === node.value) { if (node.left === null && node.right === null) return null; if (node.left === null) return node.right; if (node.right === null) return node.left; if (typeof type !== 'undefined') { if (type === 'getMax') { node.value = getMax(node.right); node.right = remove(node.right, node.value); } else { node.value = getMin(node.left); node.left = remove(node.left, node.value); } } else { node.value = getMin(node.right); node.right = remove(node.right, node.value); } } else { value < node.value ? node.left = remove(node.left, value, 'getMax') : node.right = remove(node.right, value, 'getMin'); } return node; }
var obj = new BinaryTree();
obj.add(0);
obj.add(2);
obj.add(1);
obj.add(3);
obj.add(4);
obj.add(8);
obj.add(1);
obj.add(-3);
obj.add(-2);
obj.add(-7);
obj.add(-22);
obj.add(-1);
obj.add(-3);
obj.add(-1);
相关文章推荐
- synchronized关键字详解
- Android 存储方式之SharedPreference SQLite ContentProvider
- 表格行的css交替
- ROS中robot_pose_ekf包的使用
- spark 读取hbase数据并转化为dataFrame
- XPath路径表达式
- 【Lucene】Apache Lucene全文检索引擎架构之中文分词和高亮显示
- SoNB Website
- C++ 模板类友元之输出流操作符重载
- 仿淘宝商品详情页面标题下拉渐变效果
- Java并发编程:Callable、Future和FutureTask
- Gradle如果查看更多错误信息
- 一种提高Android应用进程存活率新方法
- 【辨异】 —— 带宽与宽带
- vue.js 列表渲染
- Python基础教程笔记 第二章
- POJ2584
- Linux查找
- git学习
- 视频图像处理概念篇