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)

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值