数据结构 - 树
2019-06-15 09:54
1316 查看
树
数据结构 - 树。
// 树实现 // ES5 var Tree = function() { var root = null; // 辅助类 var Node = function(value) { this.value = value; this.left = null; this.right = null; }; // 插入节点 var insertNode = function(node, newNode) { // 节点比较 if (newNode.value > node.value) { // 往右走 if (node.right == null) { node.right = newNode; } else { insertNode(node.right, newNode); } } else if (newNode.value < node.value) { // 往左走 if (node.left == null) { node.left = newNode; } else { insertNode(node.left, newNode); } } }; this.insert = function(value) { // 新的节点 var newNode = new Node(value); // 检查是否为空树 if (root == null) { root = newNode; } else { insertNode(root, newNode); } }; // 遍历节点 var traverse = function(node, callback) { // 检查节点是否为空 if (node != null) { // callback(node.value); // 8,2,3,9 traverse(node.left, callback); // callback(node.value); // 2,3,8,9 traverse(node.right, callback); // callback(node.value); // 3,2,9,8 } }; this.traverse = function(callback) { traverse(root, callback); }; // 移除节点 var findMinNode = function(node) { if (node == null) return null; while(node && node.left) { return node.left; } return node; }; var removeNode = function(node, value) { if (node == null) return null; if (value > node.value) { // 向右查找 node.right = removeNode(node.right, value); return node; } else if (value < node.value) { // 向左查找 node.left = removeNode(node.left, value); return node; } else { // 无子节点 if (node.left == null && node.right == null) { node = null; return node; } // 只有一个子节点 if (node.left == null && node.right) { return node.right; } if (node.left && node.right == null) { return node.left; } // 有两个子节点 var aux = findMinNode(node); // 获取最小节点 node.value = aux.value; node.right = removeNode(node.right, aux.value); return node; } }; this.remove = function(value) { root = removeNode(root, value); }; // 获取根节点 this.getRoot = function() { return root; }; }; var t = new Tree(); t.insert(11); t.insert(8); t.insert(4); t.insert(9); t.insert(3); t.insert(5); t.remove(4); var result = function(value) { console.log(`value - ${value}`); }; t.traverse(result);
相关文章推荐
- oracle triggers 实现两个结构相同的表的数据级联更新操作
- (6)Java数据结构-- 转:JAVA常用数据结构及原理分析
- 数据结构实验之排序四:寻找大富翁
- HashMap的实现原理和底层数据结构
- [数据结构与算法]二叉排序(搜索)树实现
- 数据结构基础温故-1.线性表(中)
- sdutacm-数据结构实验之队列一:排队买饭
- Python 数据结构
- 数据结构——树的孩子兄弟表示法
- C#数据结构揭秘一
- 再回首,数据结构——顺序栈上的常见操作
- 第四十六篇:Linux中的USB XHCI HOST TRANSFER RING的相关数据结构 (1)
- PLSQL怎样导出oracle表结构和数据
- 数据结构1.1,1.2
- 实战数据结构(3)_两个单链表间的合并操作
- 再回首,数据结构——树的先序、中序、后序遍历的递归与非递归实现
- 两个二叉树结构是否相同(结构和数据都相同) -- 递归和非递归方法
- 数据结构(三)实现AVL树
- 数据仓库入门(实验10)在Excel中查询层次结构
- (编程训练)再回首,数据结构——无向图的邻接矩阵表示、DFS、BFS