資料結構平衡二叉樹
參考**如下:
/* 名稱:平衡二叉樹
語言:資料結構c語言版
編譯環境:vc++ 6.0
日期: 2014-3-26
*/ #include
#include
#include
#define lh +1 // 左高
#define eh 0 // 等高
#define rh -1 // 右高
#define n 5 // 資料元素個數
typedef char keytype; // 設關鍵字域為字元型
typedef struct
elemtype; // 資料元素型別
// 平衡二叉樹的型別
typedef struct bstnode
bstnode,*bstree;
// 構造乙個空的動態查詢表dt
int initdstable(bstree *dt)
// 銷毀動態查詢表dt
void destroydstable(bstree *dt) }
// 在根指標t所指二叉排序樹中遞迴地查詢某關鍵字等於key的資料元素,
//程式設計客棧 若查詢成功,則返回指向該資料元素結點的指標,否則返回空指標。
bstree searchbst(bstree t,keytype key)
// 對以*p為根的二叉排序樹作右旋處理,處理之後p指向新的樹根結點,即旋轉
// 處理之前的左子樹的根結點。
void r_rotate(bstree *p)
// 對以*p為根的二叉排序樹作左旋處理,處理之後p指向新的樹根結點,即旋轉
// 處理之前的右子樹的根結點。
void l_rotate(bstree *p)
// 對以指標t所指結點為根的二叉樹作左平衡旋轉處理,本演算法結束時,
// 指標t指向新的根結點。
void leftbalance(bstree *t)
rd->bf=eh;
l_rotate(&(*t)->lchild); // 對*t的左子樹作左旋平衡處理
r_rotate(t); // 對*t作右旋平衡處理
} }
// 對以指標t所指結點為根的二叉樹作右平衡旋轉處理,本演算法結束時,
// 指標t指向新的根結點
void rightbalance(bstree *t)
rd->bf=eh;
r_rotate(&(*t)->rchild); // 對*t的右子樹作右旋平衡處理
l_rotate(t); // 對*t作左旋平衡處理
} }
// 若在平衡的二叉排序樹t中不存在和e有相同關鍵字的結點,則插入乙個
// 資料元素為e的新結點,並返回1,否則返回0。若因插入而使二叉排序樹
// 失去平衡,則作平衡旋轉處理,布林變數taller反映t長高與否。
int insert**l(bstree *t,elemtype e,int *taller)
else
if(e.key < (*t)->data.key)
} else
} }
return 1; }
// 按關鍵字的順序對dt的每個結點呼叫函式visit()一次
void tr**ersedstable(bstree dt,void(*visit)(elemtype)) }
void print(elemtype c)
int main()
,,,,
}; // (以教科書p234圖9.12為例)
initdstable(&dt); // 初始化空樹
for(i=0;idata);
else
printf("表中不存在此值");
printf("\n");
destroydstable(&dt);
system("pause");
return 0;
} /*
輸出效果:
(13,1)(24,2)(37,3)(53,5)(90,4)
請輸入待查詢的關鍵字: 53
(53,5)
請按任意鍵繼續. . .
*/ 執行結果如下:
本文標題: c語言 資料結構平衡二叉樹例項詳解
本文位址:
資料結構 平衡二叉樹
1 空樹是平衡二叉樹。2 如果一棵樹不為空,並且其中所有的子樹都滿足各自的左子樹與右子樹的高度差都不超過 1。下面介紹乙個簡單應用,平衡二叉樹的相關操作以後補充。給定一顆二叉樹的頭結點 head,判斷一棵樹是否是平衡二叉樹。1.1 左子樹是否為平衡二叉樹 1.2 記錄左子樹的深度,最深到達哪一層,記...
平衡二叉樹 資料結構實驗之查詢二 平衡二叉樹
剛開始接觸平衡二叉樹,沒有什麼太多要分析的。部落格裡有很多大佬們都寫的很好。平衡二叉樹就是每個節點的子樹的高度差不超過1的二叉樹。可以快速搜尋數值的一種演算法,最糟的情況就是一直找到底,但也是log n 的。還是快很多。include include include define max a b a...
資料結構 二叉樹 2 平衡二叉樹 3
前面分析了平衡二叉樹是怎麼調整平衡的,這裡就來解決另乙個問題,平衡二叉樹理論為什麼能成立?難道就不會有怎麼調都不會平衡的情況嗎?一起 一下吧。我在很早的時候就注意到了乙個問題。上圖中是一顆不平衡的二叉樹向平衡調整的一部分過程,這個過程中我發現,子樹a,b,c,d的左右關係始終都是不變的,就是從左到右...