第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

2-3 樹(shù)/紅黑樹(shù)(red-black tree)

標(biāo)簽:
Java

2-3 tree

5ba780770001edd908830163.jpg
2-3树节点

  1. null节点,null节点到根节点的距离都是相同的,所以2-3数是平衡树

  2. 2叉节点,有两个分树,节点中有一个元素,左树元素更小,右树元素节点更大

  3. 3叉节点,有三个子树,节点中有两个元素,左树元素更小,右树元素更大,中间树介于两个父元素之间。
    2叉节点3叉节点
    插入操作如下图所示
    2-3tree插入操作

红黑树

红黑树可以理解为实现了2-3树的BST(binary search tree),它是一个自平衡树,保证在最坏的情况下的操作也是O(lg(n))
特性:

  1. 每个节点有一个颜色属性(红或黑)

  2. 根节点是黑色的

  3. 所有的null节点都是黑色的,从任何null节点到根节点所经过的黑色节点数目相同

查找操作与BST是相同的
插入规则如下:

  • 按BST的插入方法在null节点上建立新节点,新节点的颜色为红色

  • 如果有右子节点为红色,则左旋,右子节点变为父节点

  • 如果左子节点与左孙节点都为红色,则进行右旋,左字节的变为父节点

  • 如果两个节点的颜色都为红色,则翻转反色

操作流程如下图所示:

5ba7807b0001e7b615830903.jpg

  • 图左为插入节点c,先标记为红,因为a、c都为红节点,故颜色反转

  • 中间插入节点a,由于插入后a、b节点都为红色,按第3条规则需要进行右旋操作,b变成了新的父节点

  • 图右插入节点b,由于b在a的右边,故先进行左旋,然后又发现a、b同为红色,再进行右旋

左旋:

5ba7807c000100f709590668.jpg5ba7807e0001d30008330687.jpg

左图为左旋前,右图为左旋后,代码如下所示:

private Node rotateRight(Node h){    assert isRed(h.right);    Node x = h.right;       // 复制h的 右子树 为节点x
    h.right = x.left;       // 将x的左子树移动到h的右节点上(替代)
    x.left = h;             // 将修改后的h节点作为x的左节点(替代)
    x.color = h.color;      // x继承h的颜色
    h.color = RED;          // 将h节点的颜色设置为红色
    return x;               // 返回x节点作为新的父节点}

右旋操作与之类似

颜色反转:

5ba780800001e88411530678.jpg5ba7808000010dec11340667.jpg

左图为颜色翻转前,右图为操作之后,代码如下所示:

private void flipColors(Node h){    assert !isRed(h);    assert isRed(h.left);    assert isRed(h.right);
    h.color = RED;              // 将父节点颜色改为红色
    h.left.color = BLACK;       // 将左右子节点颜色改为黑色,
    h.right.color = BLACK;
}

此处只实现了查找与插入,如要完整实现所有功能(还有删除),可以采用左倾红黑树(LLRB, Left-leaning red–black tree)
红黑树显示的demo


Reference

  1. wikipedia Red–black tree

原文出处:https://www.cnblogs.com/fugeny/p/9692300.html  

點(diǎn)擊查看更多內(nèi)容
1人點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消