国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹

這篇具有很好參考價值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

史上最負(fù)盛名的平衡二叉樹–紅黑樹,但其實(shí)就是2-3樹的一種實(shí)現(xiàn)

一、紅黑樹性質(zhì)

也是BST,每一個節(jié)點(diǎn)都有顏色
數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹

性質(zhì) 看 后面推導(dǎo)出來的結(jié)論

二、紅黑樹性質(zhì)推導(dǎo)過程

2-3樹

2-3樹:和紅黑樹是等價的
滿足BST的基本性質(zhì),但不是一種二叉樹
有兩種節(jié)點(diǎn):
數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹

數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹
2-3 絕對平衡:根節(jié)點(diǎn)到葉子節(jié)點(diǎn) 一定相同

2.3.1 如何維護(hù)絕對平衡2-3樹

add 2點(diǎn)會變3節(jié)點(diǎn)

數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹

再添加,3節(jié)點(diǎn)會 先融合 形成4節(jié)點(diǎn)
數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹

再對這個4節(jié)點(diǎn)分裂成 BST
數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹
再添加 18 ,會直接在12上形成3節(jié)點(diǎn)

數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹
再添加節(jié)點(diǎn)6

  • 先形成4節(jié)點(diǎn),再拆分
    數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹
    但是這樣就不是決定平衡了
    因此需要向上融合
    數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹
    再添加11, 直接在6上融合成3節(jié)點(diǎn)

再添加5,融合在分裂

數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹

還需要向上融合
數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹
這次還需要向下分裂了
數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹

2.3.2 紅黑樹&2-3樹

數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹

b - c 之間的邊用紅色表示,代表b & c是在2-3樹的同一個節(jié)點(diǎn)的
數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹
BST中對于邊是沒有特殊標(biāo)識的,紅色如何標(biāo)識?
所以就用節(jié)點(diǎn)的顏色
數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹
b標(biāo)記為紅色,標(biāo)識代表 紅色的b 和 黑色的c是在同一個節(jié)點(diǎn)上的

數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹
因?yàn)榘裝當(dāng)做子節(jié)點(diǎn)來看待的,是人為定義的

數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹

2.3.3 再來看紅黑樹的性質(zhì)

1.每個節(jié)點(diǎn)為 Black or Red
2.根節(jié)點(diǎn)是Black

數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹
紅色的是往下的

3.每一個葉子節(jié)點(diǎn)(最后的空節(jié)點(diǎn))是黑色的

其實(shí)這不是性質(zhì) 而是定義,定義空節(jié)點(diǎn)是黑色的

4.if 節(jié)點(diǎn) 是紅色的,so 他的孩子節(jié)點(diǎn)都是黑色的

數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹

4.2 黑色節(jié)點(diǎn)的右孩子一定是黑色的

因?yàn)橛疫呉彩羌t色的話,就會分裂了

5.從任意一個節(jié)點(diǎn)到葉子節(jié)點(diǎn),經(jīng)過的黑色節(jié)點(diǎn)是一樣的

2-3樹是絕對平衡的:從2-3數(shù)任意節(jié)點(diǎn)出發(fā)到葉子節(jié)點(diǎn)是相同的

在紅黑樹中就是 經(jīng)過的黑色的節(jié)點(diǎn),
所以也就說,紅黑樹是一種保持 黑平衡 的二叉樹(不是平衡二叉樹)

紅黑樹 最大高度:2long(n) O(logn)

三、紅黑樹實(shí)現(xiàn)

添加 紅黑 標(biāo)記 ,用Boolean實(shí)現(xiàn)就可以

    private static final boolean RED = true;
    private static final boolean BLACK = false;

    private class Node{
        public K key;
        public V value;
        public Node left, right;
        public boolean color;

        public Node(K key, V value){
            this.key = key;
            this.value = value;
            left = null;
            right = null;
            color = RED;
        }
    }

判斷是否是紅節(jié)點(diǎn),主要處理空節(jié)點(diǎn)

    // 判斷節(jié)點(diǎn)node的顏色
    private boolean isRed(Node node){
        if(node == null)
            return BLACK;
        return node.color;
    }

3.2 紅黑樹add

添加到2-節(jié)點(diǎn),形成3-節(jié)點(diǎn)
添加到3-節(jié)點(diǎn),暫時形成4-節(jié)點(diǎn),再分裂
新添加的節(jié)點(diǎn)首先應(yīng)該是紅節(jié)點(diǎn)(2-3中先融合進(jìn)節(jié)點(diǎn)),后續(xù)再調(diào)整

保持根節(jié)點(diǎn)為黑色的

    // 向紅黑樹中添加新的元素(key, value)
    public void add(K key, V value){
        root = add(root, key, value);
        root.color = BLACK; // 最終根節(jié)點(diǎn)為黑色節(jié)點(diǎn)
    }

3.2.1 左旋

數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹
數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹

    //   node                     x
    //  /   \     左旋轉(zhuǎn)         /  \
    // T1   x   --------->   node   T3
    //     / \              /   \
    //    T2 T3            T1   T2
    private Node leftRotate(Node node){

        Node x = node.right;

        // 左旋轉(zhuǎn)
        node.right = x.left;
        x.left = node;

        x.color = node.color;
        node.color = RED;

        return x;
    }
    // 向以node為根的紅黑樹中插入元素(key, value),遞歸算法
    // 返回插入新節(jié)點(diǎn)后紅黑樹的根
    private Node add(Node node, K key, V value){

        if(node == null){
            size ++;
            return new Node(key, value); // 默認(rèn)插入紅色節(jié)點(diǎn)
        }

        if(key.compareTo(node.key) < 0)
            node.left = add(node.left, key, value);
        else if(key.compareTo(node.key) > 0)
            node.right = add(node.right, key, value);
        else // key.compareTo(node.key) == 0
            node.value = value;

        return node;
    }

文章來源地址http://www.zghlxwxcb.cn/news/detail-416138.html

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)入門-11-紅黑樹的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)——紅黑樹

    數(shù)據(jù)結(jié)構(gòu)——紅黑樹

    目錄 概念 性質(zhì) 結(jié)點(diǎn)的定義? 插入 調(diào)整 當(dāng)p是g的左孩子時 當(dāng)p為g的右孩子時 插入完整代碼 紅黑樹的檢測 紅黑樹完整代碼(包括測試數(shù)據(jù)) ? 紅黑樹,是一種二叉搜索樹,但在每個結(jié)點(diǎn)上增加一個存儲位表示結(jié)點(diǎn)的顏色,可以是RED或BLACK。 通過對任何一條從根到葉子的路徑

    2023年04月09日
    瀏覽(28)
  • 【數(shù)據(jù)結(jié)構(gòu)】紅黑樹

    【數(shù)據(jù)結(jié)構(gòu)】紅黑樹

    ??作者:一只大喵咪1201 ??專欄:《數(shù)據(jù)結(jié)構(gòu)與算法》 ??格言: 你只管努力,剩下的交給時間! 在學(xué)習(xí)AVL樹的時候,我們知道,當(dāng)修改AVL樹的結(jié)構(gòu)(插入,刪除)時,會通過旋轉(zhuǎn)來保證平衡因子不超過1,所以頻繁的修改結(jié)構(gòu)會導(dǎo)致效率低下,今天我們學(xué)習(xí)的紅黑樹就完美解

    2023年04月17日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)-樹】紅黑樹

    【數(shù)據(jù)結(jié)構(gòu)-樹】紅黑樹

    ??????歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內(nèi)容和知識,也可以暢所欲言、分享您的想法和見解。 推薦:kuan 的首頁,持續(xù)學(xué)習(xí),不斷總結(jié),共同進(jìn)步,活到老學(xué)到老 導(dǎo)航 檀越劍指大廠系列:全面總

    2024年02月07日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)】紅黑樹詳解

    【數(shù)據(jù)結(jié)構(gòu)】紅黑樹詳解

    目錄 前言: 紅黑樹的概念: 紅黑樹的性質(zhì): 紅黑樹節(jié)點(diǎn)的定義: 紅黑樹的插入: 情況1:cur為紅,p為紅,g為黑,u存在且為紅? 情況2:cur為紅,p為紅,g為黑,u不存在或者u為黑(p和cur都在其父親節(jié)點(diǎn)同一側(cè)) 情況3:cur為紅,p為紅,g為黑,u不存在或者u為黑(p和cur在其父

    2024年04月14日
    瀏覽(26)
  • 手寫紅黑樹【數(shù)據(jù)結(jié)構(gòu)】

    手寫紅黑樹【數(shù)據(jù)結(jié)構(gòu)】

    2024-3-30 10:52:57 昨天晚上B站看到的視頻 00:00~01:00 以下內(nèi)容源自《【數(shù)據(jù)結(jié)構(gòu)】》 僅供學(xué)習(xí)交流使用 禁止其他平臺發(fā)布時刪除以下此話 本文首次發(fā)布于CSDN平臺 作者是CSDN@日星月云 博客主頁是https://jsss-1.blog.csdn.net 禁止其他平臺發(fā)布時刪除以上此話 我紅黑樹那么牛,你們憑什

    2024年04月25日
    瀏覽(26)
  • 數(shù)據(jù)結(jié)構(gòu)之紅黑樹

    數(shù)據(jù)結(jié)構(gòu)可視化演示鏈接,也就是圖片演示的網(wǎng)址 數(shù)據(jù)結(jié)構(gòu)之AVL Tree 數(shù)據(jù)結(jié)構(gòu)之B樹和B+樹 數(shù)據(jù)結(jié)構(gòu)之Radix和Trie 數(shù)據(jù)結(jié)構(gòu)之二叉搜索樹 紅黑樹是一種二叉查找樹,但在每個結(jié)點(diǎn)上增加了一個存儲位表示結(jié)點(diǎn)的顏色,可以是RED或者BLACK。通過對任何一條從根到葉子的路徑上各個

    2024年01月17日
    瀏覽(18)
  • 數(shù)據(jù)結(jié)構(gòu)--紅黑樹詳解

    數(shù)據(jù)結(jié)構(gòu)--紅黑樹詳解

    紅黑樹(Red Black Tree)是一種自平衡二叉查找樹。它是在 1972 年由 Rudolf Bayer 發(fā)明的,當(dāng)時被稱為平衡二叉 B 樹(symmetric binary B-trees)。后來,在 1978 年被 Leo J. Guibas 和 Robert Sedgewick 修改為如今的“紅黑樹”。 由于其自平衡的特性,保證了最壞情形下在 O(logn) 時間復(fù)雜度內(nèi)完

    2024年02月22日
    瀏覽(14)
  • C++數(shù)據(jù)結(jié)構(gòu)--紅黑樹

    C++數(shù)據(jù)結(jié)構(gòu)--紅黑樹

    紅黑樹,是一種二叉搜索樹,但在每個結(jié)點(diǎn)上增加一個存儲位表示結(jié)點(diǎn)的顏色,可以是Red或Black。 通過對任何一條從根到葉子的路徑上各個結(jié)點(diǎn)著色方式的限制,紅黑樹確保沒有一條路 徑會比其他路徑長出倆倍,因而是接近平衡的。如圖所示: 每個結(jié)點(diǎn)不是紅色就是黑色。

    2024年02月09日
    瀏覽(22)
  • 數(shù)據(jù)結(jié)構(gòu)——紅黑樹詳解

    數(shù)據(jù)結(jié)構(gòu)——紅黑樹詳解

    紅黑樹,是一種二叉搜索樹,但在每個結(jié)點(diǎn)上增加一個存儲位表示結(jié)點(diǎn)的顏色,可以是Red或Black。 通過對任何一條從根到葉子的路徑上各個結(jié)點(diǎn)著色方式的限制,紅黑樹 確保沒有一條路徑會比其他路徑長出兩倍 ,因而是接近平衡的。(說它是接近平衡因?yàn)樗]有像AVL樹的

    2024年04月13日
    瀏覽(16)
  • 數(shù)據(jù)結(jié)構(gòu)篇十:紅黑樹

    數(shù)據(jù)結(jié)構(gòu)篇十:紅黑樹

    ??紅黑樹是解決單支樹問題的另一種解決方法,它相比較AVL樹減少了調(diào)整的次數(shù),AVL是一格絕對平衡的樹,而紅黑樹只要求最長路徑不超過最短路徑的二倍,相比較大大減少了調(diào)整次數(shù)。在實(shí)際中更多的也是使用紅黑樹,就比如后面的map和set,我們就是以紅黑樹進(jìn)行封裝的

    2024年03月12日
    瀏覽(41)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包