Js实现二叉树

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)

可以自己测试一下看看效果

你可能感兴趣的:(数据结构)