二叉樹左旋和右旋

2021-09-08 11:14:34 字數 777 閱讀 8368

**:

樹的旋轉,分為左旋和右旋,以下借助圖來做形象的解釋和介紹:

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每...