二叉樹左旋右旋

2021-07-11 19:43:40 字數 830 閱讀 4162

額,今天先更左旋右旋,當然加強版的線段樹正在來的路上。。。

左旋右旋,就是說可以用來平衡二叉樹,加強二叉樹的效率。

如果閱讀上有些困難,建議畫乙個圖來看。

#include

#include

usingnamespace

std;

int n;

structnode

pool[100100],*root;

void insert (node *r,node *p)//建樹

else }

void rotate_left(node *p) //左旋

//如果說開始左旋點的父是根的話,現在左旋點是根 if

(gp->

ch[0]==parent) gp->

ch[0]=p;

//如果開始左旋點的父是左旋點的父的父的左子,那麼現在開始左旋點的父的父的左子變為左旋點

else gp->ch[1]=p;//反之

}void rotate_right(node *p)//

與左旋同樣的道理

if(gp->ch[0]==parent) gp->ch[0]=p;

else gp->ch[1]=p;

}void treap(node *p) //

判斷左旋還是右旋

void inorder(node *p)//

中序列印

void input() //

簡單輸入

root=&pool[1];

for(int i=2;i<=n;i++)

inorder(root); }

int main()

二叉樹左旋和右旋

樹的旋轉,分為左旋和右旋,以下借助圖來做形象的解釋和介紹 1.左旋 右子為軸,當前結點左旋 如上圖所示 當在某個結點pivot上,做左旋操作時,我們假設它的右孩子y不是nil t pivot可以為樹內任意右孩子而不是nil t 的結點。左旋以pivot到y之間的鏈為 支軸 進行,它使y成為該孩子樹新...

二叉樹左旋和右旋

樹的旋轉,分為左旋和右旋,以下借助圖來做形象的解釋和介紹 1.左旋 右子為軸,當前結點左旋 如上圖所示 當在某個結點pivot上,做左旋操作時,我們假設它的右孩子y不是nil t pivot可以為樹內任意右孩子而不是nil t 的結點。左旋以pivot到y之間的鏈為 支軸 進行,它使y成為該孩子樹新...

平衡二叉搜尋樹 左旋 右旋

上一節 紅黑樹前奏 對樹的基本理解 我們講到 二叉搜尋樹 單向鍊錶的問題,為了解決這個問題,我們引入了平衡二叉搜尋樹。所謂平衡二叉搜尋樹,必須滿足 bst 的特性。何為平衡,每個節點的平衡因子的絕對值 1.那麼平衡因子如何計算呢?大體思路 計算每個節點的高度高度 max 左子樹高度,右子樹高度 1每...