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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

平衡二叉树所涉及的一些算法

發(fā)布時(shí)間:2024/6/5 编程问答 87 豆豆
生活随笔 收集整理的這篇文章主要介紹了 平衡二叉树所涉及的一些算法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今晚整那個(gè)ubuntu,什么也沒(méi)弄成,唉,把算法先保留一下吧, 插入函數(shù)還沒(méi)理解透徹呢

#include<stdio.h> #include<stdlib.h>#define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define NULL 0typedef int Status; typedef int ElemType; typedef int KeyType;typedef struct BSTNode{ElemType data;int bf; //結(jié)點(diǎn)平衡因子BSTNode *lchild, *rchild; //左右孩子指針 }BSTNode, *BSTree;Status InitBSTree(BSTree &BT) //初始化 {//操作結(jié)果:構(gòu)造一個(gè)空的動(dòng)態(tài)查找表BTBT=NULL;return OK; }//InitBSTreeStatus DestroyBSTree(BSTree &BT) //銷(xiāo)毀 {//初始條件:動(dòng)態(tài)表已經(jīng)存在。操作結(jié)果:銷(xiāo)毀動(dòng)態(tài)查找表BTif(BT) //非空樹(shù){if(BT->lchild) //有左孩子DestroyBSTree(BT->lchild); //遞歸法銷(xiāo)毀左孩子子樹(shù)if(BT->rchild) //有右孩子DestroyBSTree(BT->rchild); //遞歸法消去右孩子子樹(shù)free(BT); //釋放根結(jié)點(diǎn)BT=NULL;}//ifreturn OK; }//DestroyBSTreeBSTree SearchBSTree(BSTree T, KeyType key) //查找 {//在根指針T所指平衡二叉樹(shù)中遞歸地查找某關(guān)鍵字等于key的數(shù)據(jù)元素//若查找成功,則返回指向該數(shù)據(jù)元素結(jié)點(diǎn)的指針,否則返回空指針。if(!T){if(key == T->data)return T; //查找結(jié)束;else if(key < T->data)return SearchBSTree(T->lchild, key); //在左子樹(shù)中查找else if(key > T->data)return SearchBSTree(T->rchild, key); //在右子樹(shù)中查找}//if }//SearchBSTreeStatus R_Rotate(BSTree &p) //右旋 {//對(duì)以*p為根的二叉樹(shù)作右旋處理,處理之后p指向新的樹(shù)根結(jié)點(diǎn),//即指向處理前的左子樹(shù)的根結(jié)點(diǎn)(p的左孩子結(jié)點(diǎn))BSTree lc;lc=p->lchild; //lc指向左子樹(shù)的根結(jié)點(diǎn)p->lchild = lc->rchild; //lc的右子樹(shù)掛接為p的左子樹(shù)lc->rchild =p;p=lc; //p指向新的根結(jié)點(diǎn)return OK; }//R_RotateStatus L_Rotate(BSTree &p) //左旋 {BSTree rc;rc=p->rchild;p->rchild = rc->lchild;rc->lchild=p;p=rc;return OK; }//L_Rotate#define LH +1 //左高 #define EH 0 //等高 #define RH -1 //右高Status LeftBalance(BSTree &T) //左平衡旋轉(zhuǎn)處理 {//對(duì)以指針T所指結(jié)點(diǎn)為根的二叉樹(shù)作左平衡處理,//T指向新根結(jié)點(diǎn)BSTree lc, rd;lc=T->lchild; //lc指向*T的左子樹(shù)根結(jié)點(diǎn)switch(lc->bf){//檢查*T的左子樹(shù)的平衡度,并作相應(yīng)處理case LH://新結(jié)點(diǎn)插入在*T的左子樹(shù)上,要做單右旋處理T->bf = lc->bf = EH;R_Rotate(T);break;case RH://新結(jié)點(diǎn)插入在*T的左孩子的右子樹(shù)上,要做雙旋處理rd=lc->rchild; //rd指向*T的左孩子的右子樹(shù)根switch(rd->bf){//修改*T及其左孩子的平衡因子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;}//switchrd->bf=EH;L_Rotate(T->lchild);//對(duì)*T的左子樹(shù)做左旋平衡處理R_Rotate(T); //對(duì)*T做右旋處理}//switchreturn OK; }//LeftBalanceStatus RightBalance(BSTree &T) //右平衡旋轉(zhuǎn)處理 {//對(duì)以T所指向的結(jié)點(diǎn)為根二叉樹(shù)做右平衡處理,//T指向新的根結(jié)點(diǎn)BSTree rc, rd;rc=T->rchild; //rc指向T的右子樹(shù)根結(jié)點(diǎn)switch(rc->bf){//檢查*T的右子樹(shù)的平衡度,并作相應(yīng)平衡處理case RH: //新結(jié)點(diǎn)插入在右子樹(shù)右子樹(shù)上,單向左旋T->bf=rc->bf=EH;L_Rotate(T);break;case LH: //新結(jié)點(diǎn)插入在右子樹(shù)的左子樹(shù)上,雙選處理rd=rc->lchild;//rd指向右子樹(shù)的座子樹(shù)根switch(rd->bf){//修改*T及其右孩子的平衡因子case RH: T->bf=LH;rc->bf=EH;break;case EH: T->bf=rc->bf=EH;break;case LH: T->bf=EH;rc->bf=RH;}//switchrd->bf=EH;R_Rotate(T->rchild);//右子樹(shù)右旋L_Rotate(T); //對(duì)*T作左旋平衡處理}//switchreturn OK; }//RightBalanceStatus InsertElem(BSTree &T, ElemType e, Status &taller) {//若不存在e則插入,返回1;否則返回0;若插入后失衡,則作相應(yīng)平衡處理//taller記錄樹(shù)長(zhǎng)高與否if(!T){//插入新結(jié)點(diǎn)樹(shù)長(zhǎng)高,則置taller為T(mén)RUET=(BSTree)malloc(sizeof(BSTNode));T->data=e;T->lchild=T->rchild=NULL;T->bf=EH;taller=TRUE;}else{if(e == T->data){//存在相同結(jié)點(diǎn),則不插入taller=FALSE;return FALSE;}//ifif(e < T->data){//應(yīng)繼續(xù)在T的左子樹(shù)中搜索if(!InsertElem(T->lchild, e, taller))//未插入return FALSE;if(taller) //已插入,且左子樹(shù)長(zhǎng)高{switch(T->bf)//檢查*T的平衡度{case LH://原本左高,需左平衡處理LeftBalance(T);taller=FALSE;break;case EH: //原本等高,左增高則樹(shù)增高T->bf=LH;taller=TRUE;break;case RH: //原本右高,則左右等高taller=FALSE;}//switch}//ifelse{//應(yīng)在T的右子樹(shù)中搜索if(!InsertElem(T->rchild, e, taller))//未插入return FALSE;if(taller){switch(T->bf)//檢查T(mén)的平衡度{case LH: T->bf=EH;taller=FALSE;break;case EH: T->bf=RH;taller=TRUE;break;case RH: RightBalance(T);taller=FALSE;}}}}}return OK;}


?

轉(zhuǎn)載于:https://www.cnblogs.com/java0721/archive/2011/12/06/2602924.html

總結(jié)

以上是生活随笔為你收集整理的平衡二叉树所涉及的一些算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产日日操 | 久久精品黄色片 | 男人添女人囗交视频 | av美女在线观看 | 性色av浪潮av | 亚洲成人 av | 自拍偷拍2019 | 美日韩精品 | 欧美日韩国产片 | 国产一区二区在线免费 | www.久久精品视频 | 国产又粗又猛又爽 | av在线短片| 中文字幕av免费 | 国产精品视频一区二区三区 | 四虎啪啪| youjizz亚洲女人 | 进去里在线观看 | 师生出轨h灌满了1v1 | 自拍偷拍国内 | 香蕉视频污视频 | 人妻丰满熟妇av无码久久洗澡 | 日本理论视频 | 久久网站av | 日本久操 | 中文字幕网伦射乱中文 | www.国产麻豆| aaa特级毛片 | 国产主播精品在线 | 波多野42部无码喷潮 | 国产精品一区二区白浆 | 欧美网站在线观看 | 久久久视频6r | 欧美成人免费观看 | 日本免费一区二区三区四区五六区 | 精品不卡视频 | 欧美视频第一区 | 亚洲激情网站 | 又黄又免费的视频 | 又黄又色又爽 | 成人午夜免费在线观看 | 欧美极品少妇 | 国产xx在线观看 | 97综合| 日本理伦片午夜理伦片 | 日本天堂在线观看 | 综合激情网 | 人人射人人射 | 国产精品一卡二卡三卡 | 永久免费在线观看av | 亚洲小视频在线观看 | 亚洲av成人无码一二三在线观看 | 久久永久免费视频 | 欧美国产精品一区二区三区 | 免费看国产曰批40分钟粉红裤头 | 欧美成人免费观看 | 中文字幕三级电影 | 激情文学综合网 | 91高清在线| 欧美三级精品 | 久久裸体视频 | 精品无码久久久久久久久 | 可以免费观看的av网站 | 中文字字幕一区二区三区四区五区 | 国产视频亚洲 | 激情小说欧美色图 | av男人网 | 精品无码国产污污污在线观看 | 国产精品电影在线观看 | 国产精品久久久久99 | 涩涩精品| 韩国毛片基地 | 爱爱视频日本 | 顶级嫩模啪啪呻吟不断好爽 | 91麻豆蜜桃一区二区三区 | 国产日本视频 | 色88久久久久高潮综合影院 | 精品人妻互换一区二区三区 | 成人国产免费 | 免费成人视屏 | 夜夜撸小说 | 亚洲在线激情 | 色批网站 | 一区二区三区不卡在线观看 | 丰满熟妇人妻av无码区 | 香蕉视频在线免费看 | 综合黄色 | 欧美日韩精选 | 美女黄色大片 | 肥臀浪妇太爽了快点再快点 | 少妇无内裤下蹲露大唇视频 | 亚洲av无码专区国产乱码不卡 | 一级大片儿 | 欧美69视频 | 中文字幕在线观看的网站 | 国产女人18毛片水18精 | 麻豆av一区 | 全部孕妇毛片丰满孕妇孕交 | 色综合久久五月 |