**:
樹的旋轉,分為左旋和右旋,以下借助圖來做形象的解釋和介紹:
1.左旋(右子為軸,當前結點左旋)
如上圖所示:
當在某個結點pivot上,做左旋操作時,我們假設它的右孩子y不是nil[t],pivot可以為樹內任意右孩子而不是nil[t]的結點。
左旋以pivot到y之間的鏈為「支軸」進行,它使y成為該孩子樹新的根,而y的左孩子b則成為pivot的右孩子。
來看演算法導論對此操作的演算法實現(以x代替上述的pivot):
left-rotate(t, x)
1 y ← right[x] ▹ set y.
2 right[x] ← left[y] ▹ turn y's left subtree into x's right subtree.
3 p[left[y]] ← x
4 p[y] ← p[x] ▹ link x's parent to y.
5 if p[x] = nil[t]
6 then root[t] ← y
7 else if x = left[p[x]]
8 then left[p[x]] ← y
9 else right[p[x]] ← y
10 left[y] ← x ▹ put x on y's left.
11 p[x] ← y
2.右旋
右旋與左旋差不多,再此不做詳細介紹。
二叉樹左旋和右旋
樹的旋轉,分為左旋和右旋,以下借助圖來做形象的解釋和介紹 1.左旋 右子為軸,當前結點左旋 如上圖所示 當在某個結點pivot上,做左旋操作時,我們假設它的右孩子y不是nil t pivot可以為樹內任意右孩子而不是nil t 的結點。左旋以pivot到y之間的鏈為 支軸 進行,它使y成為該孩子樹新...
二叉樹左旋右旋
額,今天先更左旋右旋,當然加強版的線段樹正在來的路上。左旋右旋,就是說可以用來平衡二叉樹,加強二叉樹的效率。如果閱讀上有些困難,建議畫乙個圖來看。include include usingnamespace std int n structnode pool 100100 root void ins...
平衡二叉搜尋樹 左旋 右旋
上一節 紅黑樹前奏 對樹的基本理解 我們講到 二叉搜尋樹 單向鍊錶的問題,為了解決這個問題,我們引入了平衡二叉搜尋樹。所謂平衡二叉搜尋樹,必須滿足 bst 的特性。何為平衡,每個節點的平衡因子的絕對值 1.那麼平衡因子如何計算呢?大體思路 計算每個節點的高度高度 max 左子樹高度,右子樹高度 1每...