红黑树总结

目录

1. 红黑树的基本特征

2. 红黑树的插入

3. 红黑树的删除


1. 红黑树的基本特征

① 结点必须是红色或黑色;
② 根节点必须为黑;
③ 空叶子为黑;
④ 红色结点的孩子必然是黑(即从根结点出发到空叶子的任意路径上不存在连续的红色结点);
⑤ 从根出发到所有空叶子的所有简单路径上黑色结点数必须相等。

2. 红黑树的插入

情况一:插入位置为根结点---直接插入;
情况二:插入位置不是根结点,且双亲节点为黑---直接插入;
情况三:插入位置不是根结点,且双亲结点为红,叔叔结点为红---
       将双亲结点染色为黑,向上调整,将祖父结点染色为红,再将祖父结点作为新插入结点重复上述操作。
情况四:插入位置不是根结点,且双亲结点为红,叔叔结点为红---
                   G(B)                                               P(B)
                  /       \                                             /        \
                P(R)  U(B)             右旋->             N(R)  G(R)
                /                                                         \
            N(R)                                                     U(B)
    
                   G(B)                                              P(B)
                  /      \                                             /       \
               U(B)  P(R)             左旋->           G(R)   N(R)
                            \                                       /                 
                           N(R)                             U(B)
情况五:插入位置不是根结点,且双亲结点为红,叔叔结点为红---
                   G(B)                                              G(B)
                  /       \                                             /       \
             P(R)    U(B)             左旋->            N(R)    U(B)      =      情况四的1
                  \                                               /
                 N(R)                                      P(R)
    
                   G(B)                                             G(B)
                  /      \                                            /        \
           U(B)     P(R)             右旋->            U(B)    N(R)      =       情况四的2
              /                                                       \                
         N(R)                                                    P(R)       

3. 红黑树的删除

情况一:被删除结点无子节点,且被删除结点为红---直接删除

情况二:被删除结点无子节点,且被删除结点为黑
        1.兄弟结点为黑,且有一个同方向上的红色子节点
        1.1            F(u)                                            B(U)
                        /      \                                           /      \
                   N(B)   B(B)             B左旋->         F(B)  S(B)
                       \                                               /
                      S(R)                                      N(B)
    
       1.2           F(u)                                             B(U)
                     /       \                                            /      \
                  B(B)   N(B)             B右旋->        S(B)    F(B)
                   /                                                      \
                S(R)                                                  N(B)
       
       2.兄弟结点为黑,且有一个不同方向上的红色子节点
       2.1          F(U)                                             F(U)
                     /      \                                            /       \
                 N(B)    B(B)            B右旋->       N(B)    S(B)       =      1.1的情形
                  /                                                     \
              S(R)                                                 B(R)
    
       2.2        F(U)                                                F(U)
                   /       \                                              /       \
              B(B)     N(B)             B左旋->         S(B)      N(B)    =      1.2的情形
                   \                                                 /
                 S(R)                                         B(R)
      

       3.兄弟结点为黑,且无红色子节点
       3.1       F(R)                                                F(B)
                  /      \                                               /       \           ->向上调整
             N(B)    B(B)             染色->              N(B)   B(R)

       3.2      F(B)                                                 F(B)
                 /      \                                                /       \           ->向上调整
             N(B)  B(B)             染色->                N(B)    B(R)

      4.兄弟结点为红,则父节点必为黑
      4.1      F(B)                                                B(B)
                /      \                                               /      \
             N(B)  B(R)             B左旋->           F(R)               =    上述情形中的一种
                                                                   /
                                                              N(B)
    
      4.2      F(B)                                             B(B)
                /      \                                            /      \
            B(R)   N(B)             B右旋->                  F(R)       =    上述情形中的一种
                                                                              \
                                                                             N(B)


情况三:被删除结点有一个子结点,且被删结点为黑---直接删除该结点,让子结点补位并染黑。

情况四:被删除结点有两个子结点---将被删除结点的值与其前驱或后继结点交换,然后删除其前驱/后继结点,转化为上述情况中的一种。

爬虫Python学习是指学习如何使用Python编程语言来进行网络爬取和数据提取的过程。Python是一种简单易学且功能强大的编程语言,因此被广泛用于爬虫开发。爬虫是指通过编写程序自动抓取网页上的信息,可以用于数据采集、数据分析、网站监测等多个领域。 对于想要学习爬虫的新手来说,Python是一个很好的入门语言。Python的语法简洁易懂,而且有丰富的第三方库和工具,如BeautifulSoup、Scrapy等,可以帮助开发者更轻松地进行网页解析和数据提取。此外,Python还有很多优秀的教程和学习资源可供选择,可以帮助新手快速入门并掌握爬虫技能。 如果你对Python编程有一定的基础,那么学习爬虫并不难。你可以通过观看教学视频、阅读教程、参与在线课程等方式来学习。网络上有很多免费和付费的学习资源可供选择,你可以根据自己的需求和学习风格选择适合自己的学习材料。 总之,学习爬虫Python需要一定的编程基础,但并不难。通过选择合适的学习资源和不断实践,你可以逐步掌握爬虫的技能,并在实际项目中应用它们。 #### 引用[.reference_title] - *1* *3* [如何自学Python爬虫? 零基础入门教程](https://blog.youkuaiyun.com/zihong523/article/details/122001612)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [新手小白必看 Python爬虫学习路线全面指导](https://blog.youkuaiyun.com/weixin_67991858/article/details/128370135)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值