zoukankan      html  css  js  c++  java
  • 二叉树

    平衡二叉树中左旋和右旋:

    1:计算平衡因子,根据平衡因子找出失衡类型,发现者,破坏者。

    2:按照下面规则进行选着,构建新的平衡二叉树。

    红黑树:

    1:节点要么是红色,要么是黑色。

    2:根节点肯定是黑色。

    3:每个叶子的节点都是黑色的空节点(null)

    4:每个红色节点的两个子节点都是黑色(红色节点肯定是拥有两个子节点,要么都是非空,要么都是空的),(从每个叶子到根的所有路径上不能有两个连续的红色节点)

    5:从任意节点到其叶子的所有路径包含的黑色节点个数相同

    在插入红黑树的时候,节点默认是红色。

    当新增节点破坏红黑树后怎么再平衡:分为以下几种情况:新增节点默认是红色

    1:新增节点是根节点,不需要再平衡

    2:新增节点的父节点为黑色,不会破坏红黑树,不需要再平衡。

    3:新增节点的父节点是红色,且叔叔节点也是红色。

         策略:将父节点和叔叔节点都涂黑,祖父节点涂红,若祖父节点是根节点,则已经达到平衡;

                    若祖父节点不是根节点,把当前节点指向祖父节点,从新的当前节点开始算起。

    4:新增节点的父节点是红色,叔叔节点是黑色,新增节点是父节点的又子树

        策略:以新增节点为支点左旋,将当前节点的父节点作为当前节点,从新的当前节点开始算起。

    5:新增节点的父节点是红色,叔叔节点是黑色,新增节点是父节点的左子树

        策略:将父节点图黑,祖父节点涂红,并以祖父节点为支点右旋,达到平衡。

    删去节点后破坏红黑树后怎么办?

    1:若删去节点有零个子节点

         策略:1)若删去节点是根节点,直接删去

                    2)若删去节点是非空子节点,若删去节点是红色,则可以直接删去;若删去节点是黑色,则肯定会破坏平衡(因为它对应的这条路径肯定少了个黑节点),需要进行调整(没有规律)。

    2:若删去的节点有一个非空子节点

    https://www.cnblogs.com/cuizhu/p/9470340.html

    https://blog.csdn.net/weixin_38629529/article/details/81171245

  • 相关阅读:
    不重复随机数生成
    centos 输入密码正确进不去系统
    程序退出异常_DebugHeapDelete和std::numpunct
    iptables导致数据包过多时连接失败
    linux服务器并发与tcmalloc
    Windows server 2008 被ntlmssp安装攻击 解决
    转载 html div三列布局占满全屏(左右两列定宽或者百分比、中间自动适应,div在父div中居底)
    WIN2003使用IP安全策略只允许指定IP远程桌面连接
    如何让电脑公司Win7系统自动关闭停止响应的程序
    win7 64的系统安装。net4.0总是提示安装未成功
  • 原文地址:https://www.cnblogs.com/beilou310/p/11584168.html
Copyright © 2011-2022 走看看