日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二叉平衡树算法c语言,算法9-9~9-12:平衡二叉树的基本操作 (C语言代码)

發布時間:2025/3/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二叉平衡树算法c语言,算法9-9~9-12:平衡二叉树的基本操作 (C语言代码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考代碼:

#include

#include

#define?True?1

#define?False?0

#define?EH?0

#define?LH?1

#define?RH?-1

typedef?int?ElemType;

typedef?struct?BSTNode{

ElemType?data;

int?bf;

struct?BSTNode?*lchild,?*rchild;

}?BSTNode,?*BSTree;

void?LeftRotate(BSTree?*p);

void?RightRotate(BSTree?*p);

void?LeftBalance(BSTree?*T);

void?RightBalance(BSTree?*T);

int?InsertAVL(BSTree?*T,?ElemType?key,?int?*taller);

int?SearchKey(BSTree?T,?ElemType?key);

void?Free(BSTree?*T);

int?main()

{

BSTree?T?=?NULL;

int?n,?k,?key;

int?taller;

scanf("%d%d",?&n,?&k);

while(n--){

scanf("%d",?&key);

InsertAVL(&T,?key,?&taller);

}

while(k--){

scanf("%d",?&key);

printf("%d?",?SearchKey(T,?key));

}

printf("\n");

Free(&T);

return?0;

}

void?LeftRotate(BSTree?*p){

BSTNode?*t?=?(*p)->rchild;

(*p)->rchild?=?t->lchild;

t->lchild?=?*p;

*p?=?t;

}

void?RightRotate(BSTree?*p){

BSTNode?*t?=?(*p)->lchild;

(*p)->lchild?=?t->rchild;

t->rchild?=?*p;

*p?=?t;

}

void?LeftBalance(BSTree?*T){

BSTNode?*lc?=?(*T)->lchild;

switch(lc->bf){

case?LH:{

lc->bf?=?(*T)->bf?=?EH;

RightRotate(T);

break;

}

case?RH:{

BSTNode?*lr?=?lc->rchild;

switch(lr->bf){

case?EH:{

lc->bf?=?(*T)->bf?=?EH;

break;

}

case?LH:{

lc->bf?=?EH;

(*T)->bf?=?RH;

break;

}

case?RH:{

lc->bf?=?LH;

(*T)->bf?=?EH;

break;

}

}

lr->bf?=?EH;

LeftRotate(&(*T)->lchild);

RightRotate(T);

}

}

}

void?RightBalance(BSTree?*T){

BSTNode?*rc?=?(*T)->rchild;

switch(rc->bf){

case?RH:{

rc->bf?=?(*T)->bf?=?EH;

LeftRotate(T);

break;

}

case?LH:{

BSTNode?*rl?=?rc->lchild;

switch(rl->bf){

case?EH:{

rc->bf?=?(*T)->bf?=?EH;

break;

}

case?RH:{

rc->bf?=?EH;

(*T)->bf?=?LH;

break;

}

case?LH:{

rc->bf?=?RH;

(*T)->bf?=?EH;

break;

}

}

rl->bf?=?EH;

RightRotate(&(*T)->rchild);

LeftRotate(T);

}

}

}

int?InsertAVL(BSTree?*T,?ElemType?key,?int?*taller){

if(!*T){

*T?=?(BSTNode?*)malloc(sizeof(BSTNode));

(*T)->bf?=?EH;

(*T)->data?=?key;

(*T)->lchild?=?NULL;

(*T)->rchild?=?NULL;

*taller?=?True;

return?True;

}

else?if(key?==?(*T)->data){

*taller?=?False;

return?False;

}

else?if(key?data){

if(InsertAVL(&(*T)->lchild,?key,?taller)?==?False){

return?False;

}

if(*taller?==?True){

switch((*T)->bf){

case?EH:{

(*T)->bf?=?LH;

break;

}

case?RH:{

(*T)->bf?=?EH;

*taller?=?False;

break;

}

case?LH:{

LeftBalance(T);

*taller?=?False;

break;

}

}

}

return?True;

}

else{

if(InsertAVL(&(*T)->rchild,?key,?taller)?==?False){

return?False;

}

if(*taller?==?True){

switch((*T)->bf){

case?EH:{

(*T)->bf?=?RH;

break;

}

case?LH:{

(*T)->bf?=?EH;

*taller?=?False;

break;

}

case?RH:{

RightBalance(T);

*taller?=?False;

break;

}

}

}

}

return?True;

}

int?SearchKey(BSTree?T,?ElemType?key){

BSTNode?*p?=?T;

while(p){

if(key?==?p->data)?return?True;

else?if(key?data)?p?=?p->lchild;

else?p?=?p->rchild;

}

return?False;

}

void?Free(BSTree?*T)?{

if?(*T)?{

Free(&(*T)->lchild);

Free(&(*T)->rchild);

free(*T);

*T?=?NULL;

}

}

總結

以上是生活随笔為你收集整理的二叉平衡树算法c语言,算法9-9~9-12:平衡二叉树的基本操作 (C语言代码)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。