【JavaScript】JavaScript数据结构与算法 —— 二叉树
2017-11-17 15:57
274 查看
树是计算机科学中经常用到的一种数据结构。树是非线性的数据结构,以分成的方式存储数据,树被用来存储具有层级关系的数据,比如文件系统的文件,树还被用来存储有序列表。我们要研究的是二叉树,在二叉树上查找元素非常快,为二叉树添加元素或者删除元素,也是非常快的。我们现在就来学习二叉树,二叉树是一种特殊的树,它的特征是子节点个数不超过2个,相对较少的值保存在左节点上,较大的值保存在右节点中。这一特性使得查找的效率非常高。
二叉树是由节点组成的,下面对这种结构使用javascript实现增加、查询(最大、最小以及等于)、删除等操作。整体代码如下:
二叉树是由节点组成的,下面对这种结构使用javascript实现增加、查询(最大、最小以及等于)、删除等操作。整体代码如下:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> </body> <script> function Node(data,left,right) { this.data = data; this.left = left; this.right = right; this.show = show; this.find = find; } 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; } else { var current = this.root; var parent; while(current) { 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()); //输出自己 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(current.data == data) { return current; }else if(data < current.data) { current = current.left; }else { current = current.right; } } return null; } function remove(data) { //删除节点 root = removeNode(this.root,data); console.info(root); } 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; } // 有2个子节点的节点 var tempNode = getSmallest(node.right); node.data = tempNode.data; node.right = removeNode(node.right,tempNode.data); console.info(node.right,22222); 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 getSmallest(node) { if (node.left == null) { return node; } else { return getSmallest(node.left); } } var nums = new BST(); nums.insert(23); nums.insert(45); nums.insert(16); nums.insert(37); nums.insert(3); nums.insert(99); nums.insert(22); //nums.inOrder(nums.root); //nums.preOrder(nums.root); //先序访问 //nums.postOrder(nums.root); //后续访问 //var min = nums.getMin(); //console.info("最小值:" + min); //最小值:3 //var max = nums.getMax(); //console.info("最大值:" + max); //最大值:99 //var data = nums.find(23); //console.info(data); nums.remove(23); console.info(nums,333333); </script> </html>
相关文章推荐
- 二叉树的实现 -- 数据结构与算法的javascript描述 第十章
- 数据结构与算法-树2-二叉树(javascript描述)
- java数据结构与算法之树基本概念及二叉树(BinaryTree)的设计与实现
- 数据结构与算法回顾之二叉树的遍历(上)
- 数据结构与算法-第12章二叉树和其他树-003求二叉树的高度
- 数据结构与算法JavaScript (四) 串(BF)
- javascript数据结构与算法---检索算法
- 链表的实现 -- 数据结构与算法的javascript描述 第六章
- 数据结构与算法简记:通过前序中序或中序后序构建二叉树
- 数据结构与算法简记:根据层次顺序存储结构构建二叉树
- javascript数据结构与算法-简单算法
- 数据结构与算法 -二叉树和递归算法leetcode 刷题011
- 数据结构与算法-二叉树(java描述)
- JavaScript实现二叉树的先序、中序及后序遍历方法详解
- 我的软考之路(四)——数据结构与算法(2)之树与二叉树
- 数据结构与算法(18)——二叉树习题一
- 数据结构与算法(C#实现)---二叉树
- 数据结构与算法JavaScript (三) 链表
- 数据结构与算法(21)——二叉树习题四