亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bstree.cpp

?? 二叉樹 數據結構 忘了是第幾個實驗 好像是第六個 用b樹做的
?? CPP
字號:
#include<stdio.h> 
#include<stdlib.h> 
#include <malloc.h> 

#define EQ(a,b) ((a)==(b)) 
#define LT(a,b) ((a)<(b)) 
#define LQ(a,b) ((a)>(b)) 

#define LH +1 //左高 
#define EH 0 //等高 
#define RH -1 //右高 

#define true 1 
#define false 0 

/******************定義一個結構 **************/ 
typedef int KeyType; 


typedef struct BSTNode 
{ 
KeyType data; //data of boot 
struct BSTNode *lchild, *rchild; 
int bf; //結點的平衡因子 
} BSTNode,*BSTree; 



/******************* 右旋 *******************/ 


void R_Rotate(BSTree &p) 
{ 
BSTree lc; 
lc=p->lchild; //lc指向的*p的左子樹根結點 
p->lchild=lc->rchild; //lc的右子樹掛接為*p的左子樹 
lc->rchild=p; 
p=lc;//p指向新的結點 
} 


/******************* 左旋 *******************/ 


void L_Rotate(BSTree &p) 
{ 
BSTree rc; 
rc=p->rchild; //rc指向的*p的右子樹根結點 
p->rchild=rc->lchild; //rc的左子樹掛接為*p的右子樹 
rc->lchild=p; 
p=rc; //p指向新的結點 
} 


/************* 左平衡旋轉處理 **************/ 

void LeftBalance(BSTree &T) 
{ 
BSTree lc,rd; 
lc=T->lchild; //lc pointe to T left child 
switch(lc->bf){ 
case LH: T->bf=EH; 
lc->bf=EH; 
R_Rotate(T); break; 
case RH: rd=lc->rchild; 
switch(rd->bf){ 
case LH: T->bf=RH; lc->bf=EH; break; 
case EH: T->bf=lc->bf=EH; break; 
case RH: T->bf=EH; lc->bf=LH; break; 
} 
rd->bf=EH; 
L_Rotate(T->lchild); 
R_Rotate(T);//right high 
} 
} 


/************ 右平衡旋轉處理****************/ 


void RightBalance(BSTree &T) 
{ 
BSTree rc,ld; 
rc=T->rchild; 
switch(rc->bf){ 
case RH: T->bf=EH; 
rc->bf=EH; 
L_Rotate(T); break; 
case LH: ld=rc->lchild; 
switch(ld->bf){ 
case LH: T->bf=RH; rc->bf=EH; break; 
case EH: T->bf=rc->bf=EH; break; 
case RH: T->bf = EH; rc->bf=LH; break; } 
ld->bf=EH; 
R_Rotate(T->rchild); 
L_Rotate(T); 
} 
} 


/*************** 插入結點 ******************/ 

int InsertAVL(BSTree &T, KeyType e,int &taller) 
{ 

if(!T){ 
T=(BSTree )malloc(sizeof(BSTNode)); 
T->data=e; 
T->lchild=NULL; 
T->rchild=NULL; 
T->bf=EH; 
taller=true;//if unexistence make one 

//return(T); 
} 
else{ 

if(EQ(e,T->data)){taller=false;printf("已存在相同關鍵字的結點\n"); return 0;} 
if(LT(e,T->data)){//little tham boot 

if(!InsertAVL(T->lchild,e,taller)) return 0; 
if(taller) 
switch(T->bf){ 
case LH: 
{ LeftBalance(T);taller=false; break;} 
case EH: 
T->bf=LH;taller=true;break; 
case RH:T->bf=EH;taller=false; 
break; 

}//switch 
}//if 
else{ 
if(!InsertAVL(T->rchild,e,taller)) return 0; 
if(taller) 
switch(T->bf){ 
case LH: 
T->bf=EH;taller=false; 

break; 

case EH: 
T->bf=RH;taller=true; 

break; 
case RH: 
RightBalance(T);taller=false; break; 
} 
} 
} 
return 1; 
} 
/************* 左平衡旋轉處理1 **************/ 
void LeftBalance1(BSTree &p,int &shorter) 
{ 
BSTree p1,p2; 
if(p->bf==1) 
{ p->bf=0; 
shorter=1; 
} 
else if(p->bf==0) 
{ p->bf=-1; 
shorter=0; 
} 
else 
{ p1=p->rchild; 
if(p1->bf==0) 
{ p->rchild=p1->lchild; 
p1->lchild=p; 
p1->bf=1; 
p->bf=-1; 
p=p1; 
shorter=0; 
} 
else if(p1->bf==-1) 
{ 
p->rchild=p1->lchild; 
p1->lchild=p; 
p1->bf=p->bf=0; 
p=p1; 
shorter=1; 
} 
else 
{ 
p2=p1->lchild; 
p1->lchild=p2->rchild; 
p2->rchild=p1; 
p->rchild=p2->lchild; 
p2->lchild=p; 
if(p2->bf==0) 
{ 
p->bf=0; 
p1->bf=0; 
} 
else if(p2->bf==-1) 
{ 
p->bf=1; 
p1->bf=0; 
} 
else 
{ 
p->bf=0; 
p1->bf=-1; 
} 
p2->bf=0; 
p=p2; 
shorter=1; 

} 
} 

} 
/************ 右平衡旋轉處理1****************/ 

void RightBalance1(BSTree &p,int &shorter) 
{ 
BSTree p1,p2; 
if(p->bf==-1) 
{ p->bf=0; 
shorter=1; 
} 
else if(p->bf==0) 
{ p->bf=1; 
shorter=0; 
} 
else 
{ p1=p->lchild; 
if(p1->bf==0) 
{ p->lchild=p1->rchild; 
p1->rchild=p; 
p1->bf=-1; 
p->bf=1; 
p=p1; 
shorter=0; 
} 
else if(p1->bf==1) 
{ 
p->lchild=p1->rchild; 
p1->rchild=p; 
p1->bf=p->bf=0; 
p=p1; 
shorter=1; 
} 
else 
{ 
p2=p1->rchild; 
p1->rchild=p2->lchild; 
p2->lchild=p1; 
p->lchild=p2->rchild; 
p2->rchild=p; 
if(p2->bf==0) 
{ 
p->bf=0; 
p1->bf=0; 
} 
else if(p2->bf==1) 
{ 
p->bf=-1; 
p1->bf=0; 
} 
else 
{ 
p->bf=0; 
p1->bf=1; 
} 
p2->bf=0; 
p=p2; 
shorter=1; 

} 
} 

} 
/************ 刪除結點****************/ 
void Delete(BSTree q,BSTree &r,int &shorter) 
{ 
if(r->rchild==NULL) 
{ 
q->data=r->data; 
q=r; 
r=r->lchild; 
free(q); 
shorter=1; 
} 
else 
{ 
Delete(q,r->rchild,shorter); 
if(shorter==1) 
RightBalance1(r,shorter); 
} 
} 


int DeleteAVL(BSTree &p,KeyType x,int &shorter) 
{ 
int k; 
BSTree q; 
if(p==NULL) {printf("不存在要刪除的關鍵字!!\n"); return 0;} 
else if(x<p->data) 
{ 
k=DeleteAVL(p->lchild,x,shorter); 
if(shorter==1) 
LeftBalance1(p,shorter); 
return k; 
} 
else if(x>p->data) 
{ 
k=DeleteAVL(p->rchild,x,shorter); 
if(shorter==1) 
RightBalance1(p,shorter); 
return k; 
} 
else 
{ 
q=p; 
if(p->rchild==NULL) 
{p=p->lchild; 
free(q); 
shorter=1; 
} 
else if(p->lchild==NULL) 
{p=p->rchild; 
free(q); 
shorter=1; 
} 
else 
{ 
Delete(q,q->lchild,shorter); 
if(shorter==1) 
LeftBalance1(p,shorter); 
p=q; 

} 
return 1; 
} 
} 
/****************打印最后結果平衡樹**************/ 
void Print_BSTree(BSTree &T,int m)//按樹狀打印輸出二叉樹的元素,i 表示結點所在層次,初次調用時 m=0 
{ int j; 
if(T->rchild) Print_BSTree(T->rchild,m+1); 
for(j=1;j<=m;j++) printf(" "); //打印 i 個空格以表示出層次 
printf("%d \n",T->data); //打印 T 元素,換行 
if(T->lchild) Print_BSTree(T->lchild,m+1); }//Print_BiTree 
/***************** 查找 **********************/ 

BSTree BSTree_search(BSTree T,int key) 
{ 
if((!T)) printf("查找失敗!\n"); 
else if(EQ(key,T->data)) printf("查找成功!\n"); 
else if (LT(key,T->data)) return(BSTree_search(T->lchild,key)); 
else return(BSTree_search(T->rchild,key)); 

} 

/******************創建平衡二叉樹*****************/ 
void creat_BSTree(BSTree &bt) 
{ 
KeyType key; 
bt=NULL; 
int i=0; 
int m; 
printf("\n請輸入關鍵字(以-1結束建立平衡二叉樹):"); 
scanf("%d",&key); 

while(key!=-1){ 
InsertAVL(bt,key ,i) ; 

printf("\n請輸入關鍵字(以-1結束建立平衡二叉樹):"); 
scanf("%d",&key); 

} 
printf("\n創建平衡二叉樹完成.\n"); 
m=0; 
printf("**********************************************************\n"); 
if(bt) Print_BSTree(bt,m); 
else printf("這是一棵空樹!!\n\n\n"); 
printf("**********************************************************\n"); 

} 
/*****************分裂時中序遍歷二叉樹***********************/ 
void inorder(BSTree &bt,int x,BSTree &T1,BSTree &T2) 
{ int i=0; 

if (bt!=NULL){ 
inorder(bt->lchild,x,T1,T2); 
if(LQ(bt->data,x)) InsertAVL(T1,bt->data,i) ; 
else InsertAVL(T2,bt->data,i) ; 
inorder(bt->rchild,x,T1,T2); 
} 
} 


/*********************分裂平衡二叉樹**********************/ 
void devide_BSTree(BSTree T,int x)// 
{ int m=0; 
BSTree T1=NULL,T2=NULL; 
inorder(T,x,T1,T2); 
printf("******************分裂出的第一棵樹************************\n"); 
if(T1) Print_BSTree(T1,m); 
else printf("這是一棵空樹!!\n\n\n"); 
printf("*****************分裂出的第二棵樹*************************\n"); 
if(T2) Print_BSTree(T2,m); 
else printf("這是一棵空樹!!\n\n\n"); 
printf("**********************************************************\n"); 
} 

/****************合并時中序遍歷二叉樹****************/ 
void inorder1(BSTree &T1,BSTree &T2) 
{ 
int i=0; 
if (T2!=NULL){ 
inorder1(T1,T2->lchild); 
InsertAVL(T1,T2->data,i); 
inorder1(T1,T2->rchild); 
} 
} 
/****************合并平衡二叉樹*****************/ 
void unite_BSTree( ) 
{ 
int m=0; 
BSTree T1=NULL, T2=NULL; 
creat_BSTree(T1); 
creat_BSTree(T2); 
inorder1(T1,T2); 
printf("*****************兩棵樹合并后形成的樹********************\n"); 
if(T1) Print_BSTree(T1,m); 
else printf("這是一棵空樹!!\n\n\n"); 
printf("*********************************************************\n"); 
} 


/***************函數主體部分**************/ 
void body(BSTree &bt) 

{ int choi; 
KeyType key; 

int i,m; 
KeyType x,y; 
KeyType search_key; 
printf("\n\t**************************************************************\n"); 
printf("\t\t1.創建\t2.查找\t3.插入\t4.刪除\t5.分裂\t6.合并"); 
printf("\n\t**************************************************************\n"); 
printf("\n\n\n請輸入您所需的操作功能:\t"); 
scanf("%d",&choi); 

if(choi==1) 
{ 
creat_BSTree(bt); 
//break; 
} 

else if(choi==2) 
{ 
printf("請輸入要查找的關鍵字:"); 
scanf("%d",&search_key); 
BSTree_search(bt,search_key); 
//break; 
} 

else if(choi==3) 
{ 
i=0;m=0; 
printf("請輸入要插入的關鍵字:"); 
scanf("%d",&y); 
InsertAVL(bt,y ,i) ; 
printf("**********************************************************\n"); 
if(bt) Print_BSTree(bt,m); 
else printf("這是一棵空樹\n\n\n"); 
printf("**********************************************************\n"); 
//break; 
} 

else if(choi==4) 
{ 
i=0;m=0; 
printf("請輸入要刪除的關鍵字:"); 
scanf("%d",&y); 
DeleteAVL(bt,y,i); 
printf("**********************************************************\n"); 
if(bt) Print_BSTree(bt,m); 
else printf("這是一棵空樹\n\n\n"); 
printf("**********************************************************\n"); 
//break; 
} 


else if(choi==5) 
{ 
printf("請輸入要分裂點x的值:"); 
scanf("%d",&x); 
devide_BSTree(bt,x); 
//break; 
} 

else if(choi==6) 

unite_BSTree( ); 
} 


void main() 
{ 
BSTree bt=NULL; 
char c; 
do{ 
body(bt); 
c=getchar(); 
printf("\n\n是否繼續/?(Y/N)"); 
scanf("%c",&c); 
}while((c=='Y'||c=='y')&& (c=getchar()) ); 
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久一区二区三区共| 国产欧美一区二区在线| 欧美一区二区三区男人的天堂| 亚洲资源在线观看| 久久99久久精品| 在线视频欧美区| 国产丝袜美腿一区二区三区| 亚洲成人av一区二区三区| 丁香六月综合激情| 在线不卡一区二区| 亚洲精品久久嫩草网站秘色| 国产乱人伦精品一区二区在线观看| 欧美视频中文一区二区三区在线观看| 久久精品亚洲国产奇米99| 性欧美大战久久久久久久久| 91影院在线免费观看| 日本一区二区三区国色天香 | 一本色道a无线码一区v| 精品国产sm最大网站免费看| 视频一区免费在线观看| 欧美亚洲国产怡红院影院| 国产精品毛片久久久久久久| 国内偷窥港台综合视频在线播放| 欧美日韩高清一区二区三区| 亚洲乱码日产精品bd| 色综合久久久久综合体桃花网| 国产欧美日韩麻豆91| 国产精品中文字幕欧美| 精品日韩一区二区三区| 蜜臀av一区二区在线免费观看| 久久久久久久精| 久久不见久久见中文字幕免费| 欧美日韩二区三区| 亚洲图片有声小说| 欧美色精品天天在线观看视频| 一区二区三区欧美视频| 日本韩国一区二区三区视频| 亚洲精品欧美专区| 欧美亚洲综合色| 亚洲午夜久久久久久久久电影院| 欧美性极品少妇| 图片区小说区区亚洲影院| 正在播放亚洲一区| 美国毛片一区二区| 久久精品男人的天堂| 国产精品一区专区| 国产精品色婷婷| 欧洲激情一区二区| 亚洲国产成人av网| 欧美一级黄色大片| 国产精品一区一区| 奇米影视在线99精品| 日韩欧美精品在线| 福利一区在线观看| 亚洲综合激情网| 91精品福利在线一区二区三区| 久久99热这里只有精品| 国产免费观看久久| 91黄色免费版| 精品一区二区三区视频| 欧美—级在线免费片| 日本道色综合久久| 久久精品国产成人一区二区三区| 久久久久久久久99精品| 91久久一区二区| 国产一区二区三区黄视频 | 成人欧美一区二区三区黑人麻豆| 色香蕉久久蜜桃| 麻豆久久一区二区| 国产精品久久久久影院亚瑟 | 日韩国产欧美在线观看| 国产色一区二区| 欧美伊人精品成人久久综合97| 美女视频黄免费的久久| 中文字幕制服丝袜一区二区三区| 亚洲精品一区二区三区影院| 成人动漫精品一区二区| 日韩精品成人一区二区三区| 欧美激情综合在线| 日韩欧美中文一区| 91社区在线播放| 国产一区美女在线| 午夜激情综合网| 亚洲欧美自拍偷拍| 日韩欧美的一区| 欧美性欧美巨大黑白大战| 丁香一区二区三区| 美日韩一区二区| 亚洲国产欧美日韩另类综合| 国产精品毛片高清在线完整版| 欧美一级免费大片| 久久一区二区三区国产精品| 欧美天堂亚洲电影院在线播放| 国产精品1024| 久久综合综合久久综合| 亚洲一区二区三区三| 国产精品久久久久四虎| 久久精品在线免费观看| 欧美一区二区三区四区在线观看| 一本色道久久加勒比精品| eeuss影院一区二区三区| 国产一区视频导航| 免费久久精品视频| 日本欧美大码aⅴ在线播放| 亚洲综合激情另类小说区| 亚洲精品中文字幕乱码三区| 国产精品国模大尺度视频| 久久久不卡网国产精品一区| 亚洲日本欧美天堂| 国产精品理论片| 国产精品日日摸夜夜摸av| 久久精品视频在线免费观看| 精品国产一区二区精华| 欧美岛国在线观看| 日韩女优制服丝袜电影| 2020国产成人综合网| www欧美成人18+| 国产亚洲精品精华液| 欧美激情综合五月色丁香小说| 中文在线一区二区| 国产精品久久久久7777按摩| 国产精品久久久久久久久果冻传媒 | www.日本不卡| 波多野结衣欧美| eeuss鲁片一区二区三区| av成人老司机| 在线视频欧美区| 3d成人动漫网站| 精品国产凹凸成av人网站| 国产喷白浆一区二区三区| 中文字幕一区二区在线观看| 亚洲精选视频在线| 天使萌一区二区三区免费观看| 天堂一区二区在线| 日韩av一级电影| 久久97超碰色| 国产永久精品大片wwwapp| av在线播放成人| 欧美性欧美巨大黑白大战| 91精品国产综合久久精品性色| 自拍偷拍亚洲欧美日韩| 亚洲欧美在线另类| 天天综合网 天天综合色| 国产精品久久久久三级| 国产午夜精品在线观看| 国产情人综合久久777777| 亚洲精品中文在线| 久久电影网站中文字幕| 成人精品在线视频观看| 欧美性猛交xxxxxxxx| 欧美一二三区在线| 中文字幕乱码一区二区免费| 综合激情成人伊人| 久久99精品久久久| 91丨国产丨九色丨pron| 欧美三级在线看| 亚洲国产精品av| 亚洲综合免费观看高清完整版 | 亚洲综合av网| 色av成人天堂桃色av| k8久久久一区二区三区 | 精品国产一区二区三区四区四| 中文字幕日本乱码精品影院| 亚洲国产综合在线| 国产成人免费视| 一本大道久久a久久精品综合| 宅男在线国产精品| 18成人在线观看| 麻豆精品视频在线| 欧美中文字幕一区| 2021久久国产精品不只是精品| 亚洲一区二区三区视频在线播放| 久久99精品网久久| 欧美日韩aaa| 美美哒免费高清在线观看视频一区二区 | 国产香蕉久久精品综合网| 一区二区三区在线不卡| 国产在线精品免费| 在线视频观看一区| 国产亚洲综合色| 亚洲一卡二卡三卡四卡五卡| 日韩va欧美va亚洲va久久| 成人av免费网站| 欧美大尺度电影在线| 亚洲综合在线电影| 在线亚洲+欧美+日本专区| 亚洲高清视频在线| 久久久国产精品麻豆 | 欧美在线免费播放| 精品国产一区二区三区忘忧草| 亚洲国产精品一区二区久久| 成人av第一页| 精品国产乱码久久久久久免费| 午夜精品福利视频网站| 99久久99久久精品免费观看| 久久久久久久久岛国免费| 一区二区三区日韩在线观看| 韩国精品久久久| 91精品国产综合久久蜜臀| 亚洲成人精品一区二区|