1/27
文檔分類:高等教育 理學

廣工數據結構實驗報告平衡二叉樹.doc


下載后只包含 1 個 DOC 格式的文檔,沒有任何的圖紙或源代碼,查看文件列表

特別說明:文檔預覽什么樣,下載就是什么樣。

0/100
您的瀏覽器不支持進度條
下載所得到的文件列表
廣工數據結構實驗報告平衡二叉樹.doc
文檔介紹:
數據結構實驗報告題目:平衡二叉樹學院專業年級班別學號學生姓名指導教師2015年7月1日題目:采用字符類型為整型類型和鏈式存儲結構,實現抽象數據類型BTree。ADTBTree{數據對象:D={ai|ai∈ElemSet,i=1,2,...,n,n≥0}數據關系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,...,n}基本操作:Adj_balance(T)操作結果:創建平衡二叉樹。InsertAVL(T,search,taller)初始條件:二叉樹T已存在。操作結果:增加新結點。SetAVL(T,search,taller)初始條件:二叉樹T已存在。操作結果:在平衡二叉樹上增加新結點并調平衡。DeleteAVL(T,search,shorter)初始條件:二叉樹T已存在。操作結果:刪除結點。}ADTBTree存儲結構定義公用頭文件DS0.h:#include<stdio.h>#include<malloc.h>樹的內部變量typedef struct BTNode{ intdata;int bf;            //平衡因子struct BTNode *lchild,*rchild;//左、右孩子}BTNode,*BTree;/*需要的函數聲明*/ void Right_Balance(BTree &p);void Left_Balance(BTree &p);void Left_Root_Balance(BTree &T);void Right_Root_Balance(BTree &T);bool InsertAVL(BTree &T,int i,bool &taller);void PrintBT(BTree T);void Left_Root_Balance_det(BTree &p,int &shorter);void Right_Root_Balance_det(BTree &p,int &shorter); voidDelete(BTreeq,BTree&r,int&shorter);int DeleteAVL(BTree &p,int x,int &shorter);void Adj_balance(BTree &T);bool SetAVL(BTree &T,int i,bool &taller);bool Insert_Balance_AVL(BTree &T,int i,bool &taller);intmenu();算法設計/*對以*p為根的二叉排序樹作右旋處理*/voidRight_Balance(BTree&p){BTreelc;lc=p->lchild;//lc指向的*p左子樹根結點p->lchild=lc->rchild;//rc的右子樹掛接為*p的左子樹lc->rchild=p;p=lc;//p指向新的結點}/*對以*p為根的二叉排序樹作左旋處理*/voidLeft_Balance(BTree&p){BTreerc;rc=p->rchild;//指向的*p右子樹根結點p->rchild=rc->lchild;//rc左子樹掛接到*p的右子樹rc->lchild=p;p=rc;//p指向新的結點}/*對以指針T所指結點為根的二叉樹作左平衡旋轉處理*/voidLeft_Root_Balance(BTree&T){BTreelc,rd;lc=T->lchild;//指向*T的左子樹根結點switch(lc->bf)//檢查*T的左子樹的平衡度,并作相應平衡處理{case1://新結點插入在*T的左孩子的左子樹上,要作單右旋處理T->bf=lc->bf=0;Right_Balance(T);break;case-1://新結點插入在*T的左孩子的右子樹上,要作雙旋處理rd=lc->rchild;//rd指向*T的左孩子的右子樹根switch(rd->bf)//修改*T及其左孩子的平衡因子{case1:T->bf=-1;lc->bf=0;break;case0:T->bf=lc->bf=0;break;case-1:T->bf=0;lc->bf=1;break;}rd->bf=0;Left_Balance(T->lchild);//對*T的左子樹作左旋平衡處理Right_Balance(T);//對*T作右旋平衡處理}}/*對以指針T所指結點為根的二叉樹作右平衡旋轉處理*/voidRight_Root_Balance(BTree&T){BTreerc,ld;rc=T->rchild;//指向*T的左子樹根結點switch(rc->bf)//檢查*T的右子樹的平衡度,并作相應平衡處理{case-1://新結點插入在*T的右孩子的右子樹上,要作單左旋處理T->bf=rc->bf=0;Lef 內容來自淘豆網www.grzdcp.live轉載請標明出處.
北京pk10开奖视频