zoukankan      html  css  js  c++  java
  • 算法导论--第13章【红黑树】

    特点:
    1) 每个节点的颜色或是红,或是黑
    2)根节点是黑色
    3)叶节点是黑色
    4)如果一个节点是红色,则叶子为黑
    5)对每个节点,从该节点
    红黑树插入流程:
    第一步:
         和BST的插入过程相似,将待插入节点z插入到一个红黑树的叶子节点,并着红色
    因为第一步之后可能会违反红黑树的某些性质,所以要进行下一步
    第二步:
         第二步只有当插入节点的父节点为红色时才会执行,因为这个时候才会违反性质4)颜色调整分为六种情况,根据插入节点的父节点是祖父节点的左子树还是右子树分为2种,其中每种情况又有以下三种情况:
    情况a:插入节点的父节点是红色节点并且插入节点的叔叔节点(祖父节点的另外一个子节点)也是红色。
    情况b:插入节点是父节点的右子树并且叔叔节点是黑节点
    情况c:插入节点是父节点的左子树并且叔叔节点是黑节点
    针对情况a:


    针对情况b:
         将z的父节点进行一次左旋转转换为情况c
    针对情况c:
         将祖父节点进行一次右旋转转换成最终形态


    步骤三:
         将根节点着为黑色

    习题答案:
    13.1-2
         插入位置是35节点的右子树
         如果被标记为红色,则不是一颗红黑树,因为红色节点的子节点必须为黑色才满足红黑树的性质。
         如果被标为黑色,违反性质5
    13.1-3
         是
    13.1-4
         两个节点是黑色=》2
         一个节点是黑色=》3
         两个节点是红色=》4
    13.1-6
         红黑交叉分布:2^(2k+1)-1
         全黑:2^k-1
    13.1-7
         全黑时最小为0:n
         红黑交错2:1
    13.3-1 
         如果着为黑色,则会永久破坏性质5。
    13.3-2
         
         
    13.3-4 因为当新插入节点不是根节点时,该节点一定为红色,不会更改
    13.3-5 
         TODO

    我的个人博客:http://www.yancey.info/?p=137

  • 相关阅读:
    [py]戏说python面向对象细节
    [py]彻底细究web框架的wsgi+逻辑处理模块
    [py]access日志入mysql-通过flask前端展示
    [sql]mysql管理手头手册,多对多sql逻辑
    [py]requests+json模块处理api数据,flask前台展示
    [py]flask从0到1-模板/增删改查
    [wx]雪落香杉树人物关系图
    [py]资源搜集
    [py]python之信用卡ATM
    【Unity技巧】开发技巧(技巧篇)
  • 原文地址:https://www.cnblogs.com/yancey/p/3407767.html
Copyright © 2011-2022 走看看