數據結構:二叉樹、平衡二叉樹、紅黑樹詳解


一、 二叉樹(binary tree)

指每個節點最多含有兩個子樹的樹結構。時間復雜度為O(log N),在退化成鏈表的情況下時間復雜度為O(N)。

特點:

1.所有節點最多擁有兩個子節點;

2.節點的左子樹只包含小於當前根節點的數,節點的右子樹只包含大於當前根節點的數。

 

缺點: 只會以我們第一次添加的節點為根節點,如果后面添加的節點值都大於或小於根節點的值,在這種情況下會退化成鏈表。

 

二、 平衡二叉樹(Balanced Binary Tree)

又稱為AVL樹,具有二叉樹的全部特性,解決二叉樹退化成鏈表情況的問題,每個節點的左子樹和右子樹的高度之差不會超過1,AVL樹是嚴格的 平衡二叉樹,追求完全平衡,比較嚴格。
 
缺點: 由於要求每個節點的左子樹和右子樹高度之差不超過1,這個要求非常嚴格,追求完全平衡,這就導致了在頻繁插入和刪除的場景中, 可能就會導致AVL樹失去平衡,AVL樹就需要頻繁的通過左旋右旋使其重新達到平衡,這時就會時得其性能大打折扣。
 
 

三、紅黑樹

和AVL樹相比,紅黑樹放棄追求完全平衡,而是追求大致平衡,保證每次插入節點最多只需要三次旋轉就能達到平衡,維持平衡的耗時較少,實現起來也更為簡單,它的旋轉次數較少, 對於頻繁插入和刪除操作的場景,相比AVL樹,紅黑樹更具優勢。
 
特征:
1.紅黑樹是也是平衡二叉樹實現的一種方式
2.節點只能是黑色或者紅色,root根節點一定是黑色
3.新增時默認新增的節點是紅色,不允許兩個紅色節點相連
4.紅色節點的兩個子節點一定是黑色
 

紅黑樹變換規則

三種規則:

1.改變節點顏色

2.左旋轉

3.右旋轉

 

變色的情況:

當前節點的父親節點是紅色,並且它的祖父節點的另外一個子節點(叔叔節點)也是紅色:以當前節點為指針進行操作

1.將父親節點變為黑色

2.將叔叔節點變為黑色

3.將祖父節點變為紅色

4.再把指針定義到祖父節點進行旋轉操作

 

左旋轉: 當父親節點為紅色情況,叔叔節點為黑色情況,且當前節點是右子樹,左旋轉以父節點作為左旋。

 

右旋轉: 當父親節點為紅色情況,叔叔節點為黑色情況,且當前節點是左子樹,右旋轉以父節點作為右旋:

1.將父節點變為黑色

2.將祖父節點變為紅色

3.以祖父節點開始旋轉

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM