Js实现二叉树
-
实现二叉树需要先知道二叉树的特征
-
特征:
1:若它的左子树不为空,那么左子树上所有结点的值都小于它的根结点
2:如它的右子树不为空,那么右子树上的所有结点都大于跟结点的值 -
上代码
实现一个结点
class Node {
constructor(value) {
this.value = value
this.right = null
this.left = null
}
}
创建一个二叉树
class BinaryTree {
constructor() {
this.root = null
}
insert(value) {
const node = new Node(value)
if (this.root === null) {
this.root = node
} else {
this.insertNode(this.root, node)
}
}
insertNode(node, newNode) {
if (node.value > newNode.value) {
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)
}
}
}
//遍历
OrderTraverse(node, cb) {
if (node === null) return
cb(node?.value)
this.OrderTraverse(node.left, cb)
this.OrderTraverse(node.right, cb)
}
traverse(cb) {
this.OrderTraverse(this.root, cb)
}
}
测试
var nodes = [8, 3, 10, 1, 6, 14, 4, 7, 13]
var bt = new BinaryTree ()
nodes.forEach((item) => {
bt.insert(item)
})
var callback = function (key) {
console.log(key)
}
bt.traverse(callback)
可以自己测试一下看看效果