javaScript实现简易二叉树创建
2019-05-19 15:05
302 查看
二叉树:在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。
首先我们这张图的二叉树的顶端为八,也被称为根节点
1, 6 则是兄弟节点,同属于3的节点
最底层的4, 7, 13, 则被称为终点节点,又名叶子节点,
散布逻辑
以8作为根节点为例,小于8的则是左子树,大于八的则是右子树,然后然后左右子树在以此类推,
代码实现逻辑
首先我们我们肯定会有个创建根节点的构造函数,和创建子节点的构造函数
建议在chrome下运行,此处打了三个debugger,可以看一下代码的执行顺序,然后看执行时的值
//这里为创建子节点的构造函数 class BinaryNode { constructor(node) { this.node = node this.right = null this.left = null } }
//这里是创建根节点的构造函数 class BinaryTree { constructor() { //这里为根节点 this.root = null } insert(newNode) { debugger //这里是创建节点 var newNode = new BinaryNode(newNode) //如果已经存在根节点 if (this.root) { //这里是往根节点赋值 this.insertNode(this.root, newNode) } else { //没有根节点就直接赋值给根节点 this.root = newNode } } insertNode(node, newNode) { debugger //node为上一层根节点, //比较值,如果上层节点大于新的值,则往左子树赋值 if (node.node > newNode.node) { //这里是没有左子树则直接赋值 if (node.left === null) { node.left = newNode } else { //如果左子树有值, 则重新调用此函数, this.insertNode(node.left, newNode) } } else { if (node.right === null) { node.right = newNode } else { this.insertNode(node.right, newNode) } } } }
代码逻辑写完了 那我们试着调用以下构造函数
var nodes = [8, 1, 3, 6, 7, 4, 10, 14, 13] var binaryTree = new BinaryTree() nodes.forEach(node => { debugger binaryTree.insert(node) }) console.log(binaryTree.root) //看下图
这是执行完forEach时的结果,顺序展开后和我们最上面的图则是完全一样的;
相关文章推荐
- javascript实现二叉树的创建,遍历,添加,查找最大值最小值和指定值的寻找及删除功能——递归的多次运用
- JavaScript DOM中实现循环创建文办节点并添加属性节点
- JavaScript 中实现继承的方式(列举3种在前一章,我们曾经讲解过创建类的最好方式是用构造函数定义属性,用原型定义方法。)
- JavaScript实现一个简易的计算器实例代码
- Linux下之使用简单3种创建文件的命令,并实现一个Html和JavaScript小程序
- 简易SHA1函数(JavaScript实现)
- 二叉树的创建以及利用迭代实现中序、先序、后序遍历、清空
- Javascript 创建类并动态添加属性及方法的简单实现
- 在没有类的情况下,JavaScript如何创建对象、实现继承?
- Java程序员从笨鸟到菜鸟之(二十九)javascript对象的创建和继承实现
- JavaScript实现创建自定义对象的常用方式总结
- JAVA二叉树的创建以及各种功能的实现
- JavaScript 创建对象和构造类实现代码
- Java实现二叉树的创建和遍历操作
- 有关二叉树的创建和三种顺序递归(C++实现)
- c++实现二叉树层序、前序创建二叉树,递归非递归实现二叉树遍历
- HTML+CSS+JavaScript实现简易下拉菜单
- JavaScript DOM中实现循环创建文办节点并添加属性节点
- C++ 二叉树实现 创建,先序遍历,中序遍历,后序遍历
- 中序二叉树、队列实现层次遍历、中序线索二叉树的创建与遍历