紅黑樹學習

ε=(´ο`*)))唉,註定只能是個碼農了,算法一高深,就暈html

可是JDK8後不少底層集合開始改用紅黑樹,瞭解一點知識吧算法

 

這是基礎知識.net

https://blog.csdn.net/yuwushuang11/article/details/78628071htm

 

度:指的是一個節點擁有子節點的個數。如二叉樹的節點的最大度爲2。blog

深度:數的層數,根節點爲第一層,依次類推。排序

葉子節點:度爲0的節點,即沒有子節點的節點。get

 

樹:樹中的每個節點,能夠有n(後續節點)個子節點,可是每一個節點只有一個前驅節點。基礎

二叉樹:除了葉子節點外,每一個節點只有兩個分支,左子樹和右子樹,每一個節點的最大度數爲2.二叉樹

滿二叉樹:除了葉結點外每個結點都有左右子葉且葉結點都處在最底層的二叉樹,方法

 

徹底二叉樹:只有最下面的兩層結點度小於2,而且最下面一層的結點都集中在該層最左邊的若干位置的二叉樹。

也就是說,在滿叉樹的基礎上,我在最底層從右往左刪去若干節點,獲得的都是徹底二叉樹。

因此說,滿二叉樹必定是徹底二叉樹,可是徹底二叉樹不必定是滿二叉樹

平衡二叉樹:樹的左右子樹的高度差不超過1的數,空樹也是平衡二叉樹的一種。

 

平衡二叉樹,又稱AVL樹。它或者是一棵空樹,或者是具備下列性質的二叉樹:它的左子樹和右子樹都是平衡二叉樹,且左子樹和右子樹的高度之差之差的絕對值不超過1.。

經常使用算法有:紅黑樹AVL樹、Treap等。

平衡二叉樹的調整方法

平衡二叉樹是在構造二叉排序樹的過程當中,每當插入一個新結點時,首先檢查是否因插入新結點而破壞了二叉排序樹的平衡性,如果,則找出其中的最小不平衡子樹,在保持二叉排序樹特性的前提下,調整最小不平衡子樹中各結點之間的連接關係,進行相應的旋轉,使之成爲新的平衡子樹。

 

 

 

哈夫曼樹:帶權路徑長度達到最小的二叉樹,也叫作最優二叉樹。

不關心樹的結構,只要求帶權值的路徑達到最小值,哈夫曼樹多是徹底二叉樹也多是滿二叉樹。

 

二叉樹的性質:

 

(1) 在二叉樹中,第i層的結點總數不超過2^(i-1);

(2) 深度爲h的二叉樹最多有2^h-1個結點(h>=1),最少有h個結點;

(3) 對於任意一棵二叉樹,若是其葉結點數爲N0,而度數爲2的結點總數爲N2,

則N0=N2+1;

(4) 具備n個結點的徹底二叉樹的深度爲int(log2n)+1

(5)有N個結點的徹底二叉樹各結點若是用順序方式存儲,則結點之間有以下關係:

若I爲結點編號則 若是I<>1,則其父結點的編號爲I/2;

若是2*I<=N,則其左兒子(即左子樹的根結點)的編號爲2*I;若2*I>N,則無左兒子;

若是2*I+1<=N,則其右兒子的結點編號爲2*I+1;若2*I+1>N,則無右兒子。

(6)給定N個節點,能構成h(N)種不一樣的二叉樹。

h(N)爲卡特蘭數的第N項。h(n)=C(n,2*n)/(n+1)。

 

主要看

https://www.cnblogs.com/xuxinstyle/p/9556998.html

https://www.jianshu.com/p/e136ec79235c

R-B Tree簡介

    R-B Tree,全稱是Red-Black Tree,又稱爲「紅黑樹」,它一種特殊的二叉查找樹。紅黑樹的每一個節點上都有存儲位表示節點的顏色,能夠是紅(Red)或黑(Black)。

紅黑樹的特性:
(1)每一個節點或者是黑色,或者是紅色。
(2)根節點是黑色。
(3)每一個葉子節點(NIL)是黑色。 [注意:這裏葉子節點,是指爲空(NIL或NULL)的葉子節點!]
(4)若是一個節點是紅色的,則它的子節點必須是黑色的。
(5)從一個節點到該節點的子孫節點的全部路徑上包含相同數目的黑節點。

注意:(01) 特性(3)中的葉子節點,是隻爲空(NIL或null)的節點。(02) 特性(5),確保沒有一條路徑會比其餘路徑長出倆倍。於是,紅黑樹是相對是接近平衡的二叉樹。

相關文章
相關標籤/搜索