V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
linxiaoziruo
V2EX  ›  问与答

为什么说 AVL 树是严格平衡的,而红黑树不是严格平衡的

  •  
  •   linxiaoziruo · Jan 15, 2019 · 3219 views
    This topic created in 2661 days ago, the information mentioned may be changed or developed.

    为什么说 AVL 树是严格平衡的,而红黑树不是严格平衡的?红黑树经过旋转不也是平衡树吗?怎么还说红黑树不是严格平衡的呢?

    10 replies    2019-01-16 14:49:08 +08:00
    lttzzlll
        1
    lttzzlll  
       Jan 15, 2019 via Android
    严格平衡的定义 任意左右子树高度差不超过 1。其余都是非严格平衡。
    lttzzlll
        2
    lttzzlll  
       Jan 15, 2019 via Android
    叶节点,非任意。
    yidinghe
        3
    yidinghe  
       Jan 15, 2019
    红黑树是根据自己那套规则来判断要不要旋转,旋转完之后即使没有达到严格平衡,只要符合规则就处理结束了。这是在执行效率方面所做的取舍。
    linxiaoziruo
        4
    linxiaoziruo  
    OP
       Jan 15, 2019
    @lttzzlll 没明白你的意思。平衡树的定义不就是“任意左右子树高度差不超过 1 ”吗?
    linxiaoziruo
        5
    linxiaoziruo  
    OP
       Jan 15, 2019
    @linxiaoziruo 红黑树是平衡树的一种。什么才是严格平衡呢?红黑树又为什么不是严格平衡呢?
    GuuJiang
        6
    GuuJiang  
       Jan 15, 2019 via iPhone
    这个在红黑树的定义里已经写得很清楚了吧,红黑树的平衡只是保证了各子树的黑高度相等,而由黑高度的定义可以看出最坏情况下最高子树的高度是最低子树高度的两倍
    linxiaoziruo
        7
    linxiaoziruo  
    OP
       Jan 15, 2019
    @GuuJiang 弄明白了。红黑树不是平衡树,只是接近平衡树。
    mortonnex
        8
    mortonnex  
       Jan 15, 2019
    建议楼主顺便了解下:
    1.hashmap 中红黑树的使用
    2.MySQL 中索引为什么要用 B+树

    学习 avl 树可以串联起很多知识
    linxiaoziruo
        9
    linxiaoziruo  
    OP
       Jan 15, 2019
    各位大佬们,多谢了!工作四五年,从没正儿八经写过这些数据结构,最近在自己重新写,收益颇丰。
    linxiaoziruo
        10
    linxiaoziruo  
    OP
       Jan 16, 2019
    @GuuJiang 大佬,我看到一篇文章,内容是把 2-3 树演化成“红黑树”,但是这里红色和黑色标志的是“链接”,不是“节点”。红黑树还能这么定义的吗?给链接着色生成的红黑树,和给节点着色产生的红黑树都是红黑树吗?还是说给链接着色的红黑树只不过时作者意淫出来的。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5241 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 66ms · UTC 01:13 · PVG 09:13 · LAX 18:13 · JFK 21:13
    ♥ Do have faith in what you're doing.