JavaScript实现红黑树

本文介绍了红黑树的五大性质,包括结点颜色、根节点颜色、叶子结点颜色、红色结点子结点颜色以及任意结点到叶子结点路径上的黑色结点数量。这些性质确保了红黑树中任意路径的最大长度不超过最小长度的两倍,保证了树的平衡,使得查找、插入和删除操作的时间复杂度保持在O(log n)。
摘要由CSDN通过智能技术生成

红黑树五大性质
①结点是红色或者黑色,结点上只有一个color属性

②根节点是黑色

③叶子结点都是黑色,且为null

④连接红色结点的两个子结点都是黑色,红色结点的父结点都是黑色,红色子结点都是黑色

⑤从任意结点出发,到其每个叶子结点的路径中包含相同数据的黑色结点

五条性质是为了保证:从根结点到叶子结点的最长路径不大于最短路径的两倍

由于性质4,红黑树中不会出现两个红色结点相邻的情形。树中最短的可能出现的路径是都是黑色结点的路径,树中最长的可能出现的路径是红色结点和黑色结点交替的路径。再结合性质5,每条路径上均包含相同数目的黑色结点,所以红黑树确保没有一条路径会比其他路径长出2倍。

// 结点

function Node(value) {
   

    this.value = value

    this.color = 'red' // 结点的颜色默认为红色

    this.parent = null

    this.left = null

    this.right = null

}

function RedBlackTree() {
   

    this.root = null

}

RedBlackTree.prototype.insert = function(node) {
   

    // 以二叉搜索树的方式插入结点

    // 如果根结点不存在,则结点作为根结点

    // 如果结点的值小于node,且结点的右子结点不存在,跳出循环

    // 如果结点的值大于等于node,且结点的左子结点不存在,跳出循环

    if (!this.root) {
   

        this.root = node

    } else {
   

        let current = this.root

        while (current[node.value <= current.
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值