額,今天先更左旋右旋,當然加強版的線段樹正在來的路上。。。
左旋右旋,就是說可以用來平衡二叉樹,加強二叉樹的效率。
如果閱讀上有些困難,建議畫乙個圖來看。
#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每...