資料結構實驗之查詢二 平衡二叉樹

2021-07-08 15:33:07 字數 1899 閱讀 4552

建立平衡二叉樹,我們採用依次插入節點的方式進行。而平衡二叉樹上插入節點採用遞迴的方式進行。遞迴演算法如下:

(1)      若該樹為一空樹,那麼插入乙個資料元素為e的新節點作為平衡二叉樹的根節點,樹的高度增加1。

(2)      若待插入的資料元素e和平衡二叉樹(bbst)的根節點的關鍵字相等,那麼就不需要進行插入操作。

(3)      若待插入的元素e比平衡二叉樹(bbst)的根節點的關鍵字小,而且在bbst的左子樹中也不存在和e有相同關鍵字的節點,則將e插入在bbst的左子樹上,並且當插入之後的左子樹深度增加1時,分別就下列情況處理之。

(a)    bbst的根節點的平衡因子為-1(右子樹的深度大於左子樹的深度):則將根節點的平衡因子更改為0,bbst的深度不變;

(b)    bbst的根節點的平衡因子為0(左右子樹的深度相等):則將根節點的平衡因子修改為1,bbst的深度增加1;

(c)    bbst的根節點的平衡因子為1(左子樹的深度大於右子樹的深度):若bbst的左子樹根節點的平衡因子為1,則需要進行單向右旋轉平衡處理,並且在右旋處理後,將根節點和其右子樹根節點的平衡因子更改為0,樹的深度不變;

若bbst的左子樹根節點的平衡因子為-1,則需進行先向左,後向右的雙向旋轉平衡處理,並且在旋轉處理之後,修改根節點和其左,右子樹根節點的平衡因子,樹的深度不變;

(4)      若e的關鍵字大於bbst的根節點的關鍵字,而且在bbst的右子樹中不存在和e有相同關鍵字的節點,則將e插入到bbst的右子樹上,並且當插入之後的右子樹深度加1時,分別就不同的情況處理之。

(a)      bbst的根節點的平衡因子是1(左子樹的深度大於右子樹的深度):則將根節點的平衡因子修改為0,bbst的深度不變;

(b)      bbst的根節點的平衡因子是0(左右子樹的深度相等):則將根節點的平衡因子修改為-1,樹的深度加1;

(c)      bbst的根節點的平衡因子為-1(右子樹的深度大於左子樹的深度):若bbst的右子樹根節點的平衡因子為1,則需要進行兩次選擇,第一次先向右旋轉,再向左旋轉處理,並且在旋轉處理之後,修改根節點和其左,右子樹根節點的平衡因子,樹的深度不變;

若bbst的右子樹根節點的平衡因子為1,則需要進行一次向左的旋轉處理,並且在左旋之後,更新根節點和其左,右子樹根節點的平衡因子,樹的深度不變;

time limit: 400ms   memory limit: 65536k  有疑問?點這裡^_^

根據給定的輸入序列建立一棵平衡二叉樹,求出建立的平衡二叉樹的樹根。

輸入一組測試資料。資料的第1行給出乙個正整數n(n <= 20),n表示輸入序列的元素個數;第2行給出n個正整數,按資料給定順序建立平衡二叉樹。

輸出平衡二叉樹的樹根。

5

88 70 61 96 120

70

xam 

#include#includestruct node

;int max(int x,int y)

int deep(struct node *head)

struct node *ll(struct node *head)

;struct node *rr(struct node *head)

;struct node *rl(struct node *head)

;struct node *lr(struct node *head)

;struct node *creat(struct node *head,int x)

else if(xdata)

else if(x>head->data)

head->d=max(deep(head->lchild),deep(head->rchild))+1;

return head;

};int main()

平衡二叉樹 資料結構實驗之查詢二 平衡二叉樹

剛開始接觸平衡二叉樹,沒有什麼太多要分析的。部落格裡有很多大佬們都寫的很好。平衡二叉樹就是每個節點的子樹的高度差不超過1的二叉樹。可以快速搜尋數值的一種演算法,最糟的情況就是一直找到底,但也是log n 的。還是快很多。include include include define max a b a...

資料結構實驗之查詢二 平衡二叉樹

time limit 400ms memory limit 65536k 根據給定的輸入序列建立一棵平衡二叉樹,求出建立的平衡二叉樹的樹根。輸入一組測試資料。資料的第1行給出乙個正整數n n 20 n表示輸入序列的元素個數 第2行給出n個正整數,按資料給定順序建立平衡二叉樹。輸出平衡二叉樹的樹根。5...

資料結構實驗之查詢二 平衡二叉樹

資料結構實驗之查詢二 平衡二叉樹 time limit 400ms memory limit 65536k 根據給定的輸入序列建立一棵平衡二叉樹,求出建立的平衡二叉樹的樹根。輸入一組測試資料。資料的第1行給出乙個正整數n n 20 n表示輸入序列的元素個數 第2行給出n個正整數,按資料給定順序建立平...