红黑树

红黑树:红黑树是一颗黑节点完全平衡的树结构,其底层的原理依然是依据二叉搜索树的(父节点左孩子<父节点<父节点右孩子)。不同的是在创建的时候要依据节点的红黑色进行旋转变化。

红黑树的特点(来自算法导论):

1:每个节点的颜色只有红色或者黑色

2:根节点是黑色的

3:每个叶子节点(NIL)是黑色的

4:如果一个节点的颜色是红色的,那么它的两个左右孩子的节点一定是黑色的

5:对每个节点,从这个节点到其孙子节点的路径中,途径的黑色的节点的个数一定是相等的

如何创建:

首先第一个节点比较容易就是直接当做根节点,然后颜色要设置成黑色;当再次进入一个节点的时候,首先把这个节点设置成红色(每次进入新节点都是这个颜色),如果这个新节点在根节点的左侧,那么可以和二分搜索树的创建一样,不进行处理,如果这个节点比根节点的数值大(在根节点的右侧了)就要对这个根节点进行左旋转(父节点:node,父节点的右孩子X)左旋转node.right= X.left  ; X.left = node。然后改变下node和X的颜色。令X的颜色为node之前的颜色,令node的颜色为红色。当再次进入一个新节点的时候,会出现三种情况:1:出现在了父节点左孩子的右孩子的位置上;2:出现在了父节点的左孩子的左孩子的位置上;3:出现在了父节点的右孩子上。其实最后的目的要达到3的状态,使父节点出现一个左孩子一个右孩子。所以如果出现了1和2的情况,就要对这种情况进行处理。对于1要先对父节点进行右旋转(父节点node,父节点的左孩子X)右旋转node.left=X.right ; X.right = node。改变下两者的颜色(node 和 X)这个时候其实已经转换成2的情况。对于2:对于这个父节点进行右旋转。然后就到了3的情况。然后按3的情况进行处理就可以了。至此所有的情况就是这样了。

性能分析:

创建好的红黑树的树的高度是可能为2logn的,也就是说这棵树的时间复杂度为O(logn) 。但是AVL树的高度是为logn的,所以在查找和添加的时候,性能是可能不如AVL树的。但是这个数据结构是强在了综合性能上的,在删除的时候要比AVL树要快点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值