javascript实现二叉树的创建,遍历,添加,查找最大值最小值和指定值的寻找及删除功能——递归的多次运用
来源:互联网 发布:最简单数据分析方法 编辑:程序博客网 时间:2024/06/06 03:07
树是计算机科学中经常用到的一种数据结构。树是一种非线性的数据结构,以分成的方式存储数据,树被用来存储具有层级关系的数据,比如文件系统的文件,树还被用来存储有序列表。我们要研究的是二叉树,在二叉树上查找元素非常快,为二叉树添加元素或者删除元素,也是非常快的。我们现在最主要的是要来学习二叉树,二叉树是一种特殊的树,它的特征是 子节点个数不超过2个。如下图就是二叉树的基本结构示意图如下:
左子节点的值 < 父节点的值 <= 右节点的值
二叉树是由节点组成的,所以我们需要定义一个对象node,可以保存数据,也可以保存其他节点的链接(left 和 right),show()方法用来显示保存在节点中的数据。
下面对于顺序二叉树的的创建,遍历,添加,查找最大值最小值和指定值的寻找及删除功能,提供源码,仅供参考:
function BinaryTree() { var Node = function(key) { this.key = key; this.left = null; this.right = null; } var root = null; var insertNode = function(node, newNode) { if (node.key > newNode.key) { if (node.left === null) node.left = newNode; else { insertNode(node.left, newNode); } } else { if (node.right === null) { node.right = newNode; } else { insertNode(node.right, newNode); } } } this.insert = function(key) { var newNode = new Node(key); if (root == null) root = newNode; else insertNode(root, newNode); }; var inorderTraverseNode = function(node, callback) { if (node != null) { inorderTraverseNode(node.left, callback); callback(node.key); inorderTraverseNode(node.right, callback); } } //中序遍历 this.inOrderTraverse = function(callback) { inorderTraverseNode(root, callback); } //最小节点 var minNode = function(node) { if (node) { while (node.left !== null) { return minNode(node.left); } return node.key; } return null; } this.min = function() { return minNode(root); } //最大节点 var maxNode = function(node) { if (node) { while (node.right !== null) { return maxNode(node.right); } return node.key; } return null; } this.max = function() { return maxNode(root); } //查找指定值有返回true,没有则返回false var searchNode = function(key, node) { if (node == null) { return false; } if (node.key > key) { return searchNode(key, node.left); } else if (node.key < key) { return searchNode(key, key.right); } else { return true; } } this.search = function(key) { return searchNode(key, root); } //删除指定的节点 var removeNode = function(key, node) { if (node == null) return false; if (key < node.key) { var node1 = removeNode(key, node.left); node.left = node1; return node; } else if (key > node.key) { node.right = removeNode(key, node.right); } else { if (node.left === null && node.right === null) { //叶子节点的删除 node = null; return node; } else if (node.right === null) { //只有左子树的节点删除 node = node.left; return node; } else if (node.left === null) { //只有右子树的节点删除 node = node.right; return node; } else { //中间节点,既有左子树也有右子树,删除原理:左子树上的所有节点肯定比被删除的节点小,则不需要动,右子树有可能是一群树链,要找到这群树链中的最小值所在的节点,将此最小值赋值给被删除的节点,并删除该最小值所在的节点,这样可以保证被删除的节点后的值肯定比右边的所有节点小,比所有节点大。 node.key = minNode(node.right); removeNode(node.key, node.right); return node; } } } this.remove = function(key) { return removeNode(key, root); } } var nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13]; var binaryTree = new BinaryTree(); nodes.forEach(function(value, key) { binaryTree.insert(value); }); var callback = function(key) { console.log(key); } binaryTree.inOrderTraverse(callback); console.log(binaryTree.min()); console.log(binaryTree.max()); console.log(binaryTree.search(4)); console.log(binaryTree.search(100)); binaryTree.remove(3); //删除中间节点 binaryTree.inOrderTraverse(callback);
阅读全文
0 0
- javascript实现二叉树的创建,遍历,添加,查找最大值最小值和指定值的寻找及删除功能——递归的多次运用
- 二叉树的查找,插入,删除,遍历,最小值,最大值 操作
- 二叉查找树带父节点指针的创建,销毁,查找,删除,插入,找前驱后继,找最小值最大值(递归和非递归的实现)
- 二叉树的遍历 插入 查找 删除 最大值 最小值 前驱 后继节点的查找
- 二叉搜索树的相关操作:插入节点,删除节点,排序,查找,最大值,最小值,前序,中序,后序遍历(主要用到递归的方法)
- Java对二叉搜索树进行插入、查找、遍历、最大值和最小值的操作
- 二叉树的创建及递归和非递归遍历
- 二叉树创建、遍历的递归和非递归实现
- 【数据结构树表的查找】二叉排序树详解和代码(生成、插入、查找、最大值、最小值、删除、中序遍历、销毁)
- 简单写写二叉树的添加功能,中序遍历,最小值和查询功能
- 二叉查找树的创建及遍历
- 二叉查找树的各项操作(重点是结点的删除部分和递归的运用)
- 二叉树的创建遍历 递归实现
- 二叉树的创建,遍历,查找,查找父节点,深度,大小等的递归实现
- 二叉树的递归创建和遍历
- 二叉树的创建和递归遍历
- 二叉树的创建和递归遍历
- 二叉树的递归创建,以及二叉查找树查找的建立 和遍历查找的比较
- 2017年第2届深圳家居设计周暨32届深圳国际家具展会刊(参展商名录)
- 解决ECLIPSE下Web APP下没有jar包的问题
- 无法访问javax.servlet.ServletException 找不到javax.servlet.ServletException的类文件
- Sort algorithm
- 从程序员之死看 IT 人士如何摆脱低情商诅咒
- javascript实现二叉树的创建,遍历,添加,查找最大值最小值和指定值的寻找及删除功能——递归的多次运用
- SylixOS屏蔽中断实现
- 从APM源码分析GPS、气压计惯导融合
- CMake 命令学习
- Spring Boot (三):Thymeleaf 的使用
- 移动端候选人面试要点
- 使用Glide实现毛玻璃的效果
- [2-SAT] Codeforces875C.National Property
- 如何学习thinkphp