码迷,mamicode.com
首页 > 其他好文 > 详细

红黑树

时间:2016-03-07 10:26:38      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:

一、红黑树的基本性质

  1、红黑树本质上是一种二叉查找树BST,满足左孩子均小于根,右孩子均大于(等于)根的性质,但是它从根节点到最远叶子节点的长度不会超过到最近叶子节点的两倍,所以是近似平衡的。

    【证明】由于性质5  假如说一个黑高度为3的红黑树,  最短路径定为 黑-黑-黑  长度为2    最长路径 为黑-红-黑-红-黑  长度为4     所以可证明

  2、红黑树的每个节点要么为黑色要么为红色

  3、树根一定为黑色

  4、如果一个节点为红色,那么它的两个孩子一定为黑色

  5、从任意节点出发往下到达叶子节点的路径一定包含相同数目的黑节点,这个数目成为黑高度。

  

  构造一颗红黑树的话也就是两个方面  一个是构造一颗二叉查找树  一个是对于节点的染色。

  之上的这些性之中  最关键的就是性质5了   从任意节点出发往下到达叶子节点的路径一定包含相同数目的黑节点   我们所做的调整工作的基本就是以该性质为基准进行操作的

二、初识红黑树

首先以{9,7,15,6,11,19}看一下如何建立一颗红黑树

声明:我们将插入节点初始化为红色,

【原因】  因为之前的红黑树满足从根节点到叶子节点的黑节点数目相同   如果插入黑色的节点会违背性质5   所以插入红色节点  如果有违反性质再做其它调整

      首先是第一个节点9,我们直接把它当做树根,

            技术分享

      我们发现它违背性质3  所以将其改为黑色

            技术分享

      然后是插入7

             技术分享     插入之后满足所有性质  不做改变

      然后是15

          技术分享

      然后是6

          技术分享

                     此时我们发现违背了红节点两个儿子必须为黑这条性质

       该如何调整?

        首先想到的就是直接将6节点改为黑色

        但是改为黑色之后性质5又违背了

        我们考虑 没有6的时候   原有的红黑树以满足 性质5   而且仙子阿来说   同一层的7和15均为红色  

        假如说我们将他们全部变为黑色会怎么样?  只会多一层黑高   

        所以我们将7和15改为黑色

          技术分享

        发现满足所有性质

        

        插入11和19

          技术分享

        插入10

          技术分享

      此时我们发现又出现了之前的问题

      我们画瓢

 

红黑树

标签:

原文地址:http://www.cnblogs.com/zhanzhao/p/5249528.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!