上一節 紅黑樹前奏 - 對樹的基本理解 我們講到 二叉搜尋樹 單向鍊錶的問題,為了解決這個問題,我們引入了平衡二叉搜尋樹。
所謂平衡二叉搜尋樹,必須滿足 bst 的特性。何為平衡,每個節點的平衡因子的絕對值 <= 1.
那麼平衡因子如何計算呢?
大體思路:
計算每個節點的高度高度 = max(左子樹高度, 右子樹高度) + 1
每個節點的左子樹和右子樹的差
就是 平衡因子
案例:
上圖因為插入 2 元素,導致了整棵樹不平衡。此時,為了達到平衡狀態,我們需要進行左旋和右旋的操作。
為了方便理解,下面舉得例子都會比較簡單。
右旋案例:
如上圖,當插入 16 元素時,整棵樹處於非平衡狀態。這時,需要進行右旋。
大家可以想象一下,將 17 向上提,20 下沉作為 17 的右子節點。左旋同理,這裡就不提供圖了。
理解了左旋和右旋,也看了右旋的基礎例子,咋們再來看乙個左旋高階案例:
可以看到,我們將r作為了根節點,t3作為了n節點的右子節點,以達到右圖的平衡狀態。
最後,給大家推薦乙個**,方便大家對左旋和右旋的理解:紅黑數-動畫演示
二叉樹左旋右旋
額,今天先更左旋右旋,當然加強版的線段樹正在來的路上。左旋右旋,就是說可以用來平衡二叉樹,加強二叉樹的效率。如果閱讀上有些困難,建議畫乙個圖來看。include include usingnamespace std int n structnode pool 100100 root void ins...
二叉樹左旋和右旋
樹的旋轉,分為左旋和右旋,以下借助圖來做形象的解釋和介紹 1.左旋 右子為軸,當前結點左旋 如上圖所示 當在某個結點pivot上,做左旋操作時,我們假設它的右孩子y不是nil t pivot可以為樹內任意右孩子而不是nil t 的結點。左旋以pivot到y之間的鏈為 支軸 進行,它使y成為該孩子樹新...
二叉樹左旋和右旋
樹的旋轉,分為左旋和右旋,以下借助圖來做形象的解釋和介紹 1.左旋 右子為軸,當前結點左旋 如上圖所示 當在某個結點pivot上,做左旋操作時,我們假設它的右孩子y不是nil t pivot可以為樹內任意右孩子而不是nil t 的結點。左旋以pivot到y之間的鏈為 支軸 進行,它使y成為該孩子樹新...