您的位置:首页 > Web前端 > JavaScript

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时的结果,顺序展开后和我们最上面的图则是完全一样的;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐