資料結構 樹(二叉樹 紅黑樹)

2021-10-05 13:36:57 字數 1858 閱讀 1734

層次管理具有更高的效率

結點的度:結點的子樹個數

樹的度:樹中所有結點中最大的度

葉結點:度為0的結點

父結點:有子樹的結點是其子樹的根結點的父結點

子結點:若a是b的父結點,b就是a的子結點

度為2的樹(樹中所有結點中最大的度)

子樹有左右順序之分

構造一棵二叉樹,該樹的帶權路徑長度達到最小,稱為最優二叉樹,也稱為哈夫曼樹(huffman tree)

它是一 棵二叉排序樹,它的左右兩個子樹的高度差(平衡因子)的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。

目的:使得樹的高度最低,因為樹查詢的效率決定於樹的高度

一種特殊的二叉查詢樹,紅黑樹能夠以o(log2(n))的時間複雜度進行搜尋、插入、刪除操作。此外,任何不平衡都會在3次旋轉之內解決

節點非紅即黑

根節點是黑色

所有null節點稱為葉子節點,且認為顏色為黑

所有紅色節點的子節點都為黑色

從任一節點到其葉子節點的所有路徑上都包含相同數目的黑節點

從根到葉子的最長的路徑不多於最短的可能路徑的兩倍長,紅黑樹高度是平均log(n),且最壞情況高度不會超過2log(n)

插入原則:因為插入節點的顏色如果為黑肯定破壞紅黑樹性質5,所以每次插入的點首先都是紅結點

情況1:插入的新節點n位於樹的根上、插入的新節點的父節點是黑色

情況2:如果新節點的父節點(0008)和叔父節點(0017)都是紅色節點,先插入新節點(紅色),(變色)新節點的父節點、叔父節點、祖父節點都需要變色

情況3:如果新節點的父節點是紅色同時叔父節點都是黑色,同時新節點是其父節點的左子節點而父節點又是其父節點的左子節點。我們進行一次右旋轉調換新節點和其父節點的角色(以父節點為軸)

情況4:如果新節點的父節點是紅色同時叔父節點都是黑色,同時新節點是其父節點的右子節點而父節點又是其父節點的右子節點。我們對祖父節點進行一次左旋轉調換新節點和其父節點的角色(以父節點為軸)

情況5:如果新節點的父節點是紅色同時叔父節點都是黑色,同時新節點是其父節點的右子節點而父節點又是其父節點的左子節點。我們進行一次左旋轉調換新節點和其父節點的角色(第一次旋轉),同時我發現節點(0008)符合情況3,再進行一次右旋轉(第二次旋轉)

情況6:如果新節點的父節點是紅色同時叔父節點都是黑色,同時新節點是其父節點的左子節點而父節點又是其父節點的右子節點。我們進行一次右旋轉調換新節點和其父節點的角色(第一次旋轉),同時我發現節點(0017)符合情況4,再進行一次左旋轉(第二次旋轉)

二叉樹 紅黑樹

也就是說,二叉排序樹中,左子樹都比節點小,右子樹都比節點大,遞迴定義。根據二叉排序樹這個特點我們可以知道,二叉排序樹的中序遍歷一定是從小到大的,比如上圖,中序遍歷結果是 1 3 4 6 7 8 10 13 14 效能取決於 public class demo public static void m...

紅黑二叉樹

紅黑二叉樹 紅黑二叉樹的基本思想是想用標準的二叉查詢樹 完全由2 結點構成 和一些額外的資訊 替換3 結點 來表述2 3樹。或者說,我們將3 結點表示為由一條左斜的紅色鏈結相 兩個2 結點其中之一是另乙個的左子節點 連的兩個2 結點。這種表示的優點 我們無需修改就可以直接使用標準二叉查詢樹的get ...

二叉樹(三) 紅黑樹

紅黑樹是一種自平衡的二叉查詢樹,可解決二叉查詢樹因為多次插入新節點導致的不平衡問題。除了二叉查詢樹的基本特性外,還具有下列的特性 1 節點是紅色或者黑色 2 根節點是黑色 3 每個葉子節點都是黑色的空節點 nil節點 4 每個紅色節點的兩個子節點都是黑色。從每個葉子到根的所有路徑上不能有兩個連續的紅...