2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p>  算 法 與 數(shù) 據(jù) 結(jié) 構(gòu)</p><p>  課 程 設(shè) 計 報 告</p><p>  題 目: AVLree的實現(xiàn)及分析</p><p><b>  班 級: </b></p><p><b>  學(xué) 號: </b></p><p

2、><b>  姓 名: </b></p><p><b>  成 績:</b></p><p>  2013年 12月31日</p><p>  一、AVLree的實現(xiàn)及分析</p><p>  AVL 樹是平衡的二元查找樹。一株平衡的二元查找樹就是指對其每一個節(jié)點,其左子樹和右

3、子樹的高度只差不超過1.</p><p>  編寫程序?qū)崿F(xiàn)AVL樹的判別;并實現(xiàn)AVL樹的ADT,包括其上的基本操作;節(jié)點的加入和刪除。BSt和AVL的差別就在平衡性上,所以AVL的操作關(guān)鍵要考慮如何在保持二元查找樹定義條件下對二元樹進行平衡化。</p><p>  編寫AVL樹的判別程序,并判別一個人元查找數(shù)是否為AVL樹。二元查找樹用其先序遍歷結(jié)果表示,如:5,2,1,3,7,8.&l

4、t;/p><p>  實現(xiàn)AVL樹的ADT,包括其上的基本操作:節(jié)點的加入和刪除,另外包括將一般二元查找樹轉(zhuǎn)變?yōu)锳VL樹的操作。</p><p>  二、設(shè)計思想(宋體,三號加粗)</p><p>  任意給定一組數(shù)據(jù),設(shè)計一個算法,建立一棵平衡二叉樹,對它進行查找、插入、刪除等操作。平衡二叉樹ADT結(jié)構(gòu)如下:</p><p>  typedef

5、 struct{</p><p>  Status key;</p><p>  }ElemType;</p><p>  typedef struct BSTNode{</p><p>  ElemType data;</p><p>  Status bf;</p><p>  struct

6、 BSTNode *lchild,*rchild;</p><p>  }BSTNode,*BSTree;</p><p><b>  給出一組數(shù)據(jù),通過</b></p><p>  InsertAVL(BSTree &T, ElemType e, Status &taller)插入算法,構(gòu)建平衡二叉樹,若在平衡的二叉排序樹T中

7、不存在和e有相同關(guān)鍵字的結(jié)點,則插入一個數(shù)據(jù)元素為e的新結(jié)點,并返回1,否則返回0。若因插入而使二叉排序樹失去平衡,則作平衡旋轉(zhuǎn)處理,布爾變量taller反映T長高與否。</p><p>  在此算法中,利用到遞歸算法和</p><p>  LeftBalance(BSTree &T)左平衡處理,RightBalance(BSTree &T)右平衡處理。進而實現(xiàn)構(gòu)建平衡二叉

8、樹,使其左子樹和右子樹的高度之差不超過1.</p><p>  LeftBalance(BSTree &T)對以指針T所指結(jié)點為根的二叉樹作左平衡旋轉(zhuǎn)處理。本算法結(jié)束時,指針T指向新的根結(jié)點。</p><p>  RightBalance(BSTree &T)// 對以指針T所指結(jié)點為根的二叉樹作右平衡旋轉(zhuǎn)處理。本算法結(jié)束時,指針T指向新的根結(jié)點。</p>&

9、lt;p>  R_Rotate(BSTree &p) 對以*p為根的二叉排序樹作右旋處理,處理之后p指向新的樹根結(jié)點,即旋轉(zhuǎn)處理之前的左子樹的根結(jié)點</p><p>  L_Rotate(BSTree &p) 對以p↑為根的二叉排序樹作左旋處理,處理之后p指向新的樹根結(jié)點,即旋轉(zhuǎn)處理之前的右子樹的根結(jié)點</p><p>  存在一個平衡二叉樹,通過DeleteBST(

10、BSTree &T, Status key)和Delete(BSTree &p)實現(xiàn)刪除節(jié)點操作;</p><p>  Delete(BSTree &p)從二叉排序樹中刪除結(jié)點p,并重接它的左或右子樹。</p><p>  DeleteBST(BSTree &T, Status key)若二叉排序樹T中存在關(guān)鍵字等于key的數(shù)據(jù)元素時,則刪除該數(shù)據(jù)元素結(jié)

11、點p,并返回TRUE;否則返回FALSE。</p><p>  存在一個平衡二叉樹,通過SearchBST(BSTree T, Status key, BSTree f, BSTree &p)實現(xiàn)查找節(jié)點操作;</p><p>  SearchBST(BSTree T, Status key, BSTree f, BSTree &p)在根指針T所指二叉排序樹中遞歸地查找其關(guān)

12、鍵字等于key的數(shù)據(jù)元素,若查找成功,則指針p指向該數(shù)據(jù)元素結(jié)點,并返回TRUE,否則指針p指向查找路徑上訪問的最后一個結(jié)點并返回FALSE,指針f指向T的雙親,其初始調(diào)用值為NULL。</p><p>  存在一個二元排序樹或二元查找樹通過Balance(BSTree T)算法判斷是否為AVL樹,</p><p>  Balance(BSTree T)遞歸判斷是不是平衡二叉樹。</

13、p><p>  三、軟件結(jié)構(gòu)圖及流程圖(宋體,三號加粗)</p><p><b>  主函數(shù)流程圖:</b></p><p><b>  12</b></p><p><b>  34</b></p><p><b>  0</b>

14、</p><p>  構(gòu)建AVL樹和插入結(jié)點流程圖:</p><p><b>  否</b></p><p><b>  是</b></p><p>  是否</p><p><b>  查找函數(shù)流程圖:</b></p>

15、<p><b>  刪除函數(shù)流程圖:</b></p><p>  四、測試(宋體,三號加粗)</p><p>  創(chuàng)建AVL樹,輸入一組數(shù)據(jù):</p><p><b>  按先序遍歷輸出:</b></p><p>  刪除節(jié)點7;先序遍歷結(jié)果:</p><p> 

16、 插入數(shù)據(jù)6后的先序遍歷結(jié)果:然后退出子目錄操作。</p><p>  輸入一組數(shù)據(jù)創(chuàng)建BST樹,</p><p>  判斷創(chuàng)建的BST是否為AVL樹:</p><p>  創(chuàng)建的BST樹不是AVL樹,將BST轉(zhuǎn)換為AVL樹</p><p>  五、源程序(宋體,三號加粗)</p><p><b>  函數(shù)頭

17、代碼</b></p><p>  #include "iostream.h"</p><p>  #include <stdio.h></p><p>  #include <malloc.h></p><p>  #define MAXNODE 100</p><p

18、>  #define TRUE 1</p><p>  #define FALSE 0</p><p>  #define OVERFLOW 1</p><p>  #define LH +1</p><p>  #define EH 0</p><p>  #define RH -1</p>&

19、lt;p>  typedef int Status;</p><p>  typedef char TElemType;</p><p>  typedef struct</p><p><b>  {</b></p><p>  Status key;</p><p>  }ElemTyp

20、e;</p><p>  typedef struct BSTNode</p><p><b>  {</b></p><p>  ElemType data;</p><p>  Status bf;</p><p>  struct BSTNode *lchild,*rchild;</p

21、><p>  }BSTNode,*BSTree;</p><p>  Status SearchBST(BSTree T, Status key, BSTree f, BSTree &p) { </p><p>  // 算法9.5(b)</p><p>  // 在根指針T所指二叉排序樹中遞歸地查找其關(guān)鍵字等于key的數(shù)據(jù)元素,<

22、;/p><p>  // 若查找成功,則指針p指向該數(shù)據(jù)元素結(jié)點,并返回TRUE,</p><p>  // 否則指針p指向查找路徑上訪問的最后一個結(jié)點并返回FALSE,</p><p>  // 指針f指向T的雙親,其初始調(diào)用值為NULL</p><p>  if (!T) { p = f; return FALSE; }

23、 // 查找不成功</p><p>  else if (key==T->data.key) { p = T; return TRUE; } // 查找成功</p><p>  else if (key<T->data.key) </p><p>  return SearchBST(T->lchild, key, T,

24、 p); // 在左子樹中繼續(xù)查找</p><p><b>  else </b></p><p>  return SearchBST(T->rchild, key, T, p); // 在右子樹中繼續(xù)查找</p><p>  } // SearchBST</p><p>  Status InsertBS

25、T(BSTree &T, ElemType e) { // 算法9.6</p><p>  // 當(dāng)二叉排序樹T中不存在關(guān)鍵字等于e.key的數(shù)據(jù)元素時,</p><p>  // 插入e并返回TRUE,否則返回FALSE</p><p>  BSTree p,s;</p><p>  if (!SearchBST(T, e.key

26、, NULL, p)) { // 查找不成功</p><p>  s = (BSTree)malloc(sizeof(BSTNode));</p><p>  s->data = e; s->lchild = s->rchild = NULL; </p><p>  if (!p) T = s; // 插入 s 為新的根結(jié)點&

27、lt;/p><p>  else if (e.key<p->data.key) p->lchild=s; // 插入s為左孩子</p><p>  else p->rchild = s; // 插入 s 為右孩子</p><p>  return TRUE;</p><p>  } else return FALSE;

28、 // 樹中已有關(guān)鍵字相同的結(jié)點,不再插入</p><p>  } // Insert BST</p><p>  Status CreateBST(BSTree &T)//將輸入的一組數(shù)據(jù),創(chuàng)建為二叉排序樹</p><p><b>  {</b></p><p>  Status num;</p>

29、<p>  ElemType e;</p><p>  cout<<"請輸入二叉排序樹結(jié)點數(shù):"<<endl;</p><p><b>  cin>>num;</b></p><p>  while(num!=0)</p><p><b> 

30、 {</b></p><p>  cout<<"請輸入結(jié)點值:"<<endl;</p><p>  cin>>e.key;</p><p>  InsertBST(T,e);//按二叉排序樹插入方法;</p><p><b>  num--;</b>&l

31、t;/p><p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  Status max(Status lchild,Status rchild)//取較大的值返回</p>&l

32、t;p><b>  {</b></p><p>  if(lchild>rchild)</p><p>  return lchild;</p><p><b>  else</b></p><p>  return rchild;</p><p><b&g

33、t;  }</b></p><p>  Status Depth_bt(BSTree T)//求二叉樹深度</p><p><b>  {</b></p><p>  if (T==NULL) return 0;</p><p>  return 1+max(Depth_bt(T->lchild),De

34、pth_bt(T->rchild));</p><p><b>  }</b></p><p>  Status Balance(BSTree T)//遞歸判斷是不是平衡二叉樹</p><p><b>  {</b></p><p>  Status bl,br;</p><

35、;p>  if (T==NULL) return 1;//空樹輸出是平衡二叉樹</p><p>  bl=Depth_bt(T->lchild);//將左子樹的深度賦值給bl</p><p>  br=Depth_bt(T->rchild);//將右子樹的深度賦值給br</p><p>  if (bl-br>1||br-bl>1)re

36、turn 0;//如果不滿足平衡二叉樹的定義返回錯誤信息</p><p>  return Balance(T->lchild)&&Balance(T->rchild);//遞歸調(diào)用</p><p><b>  }</b></p><p>  Status n=0;</p><p>  voi

37、d N_PreOrderAVL(BSTree T)//先序遍歷(根,左,右)</p><p><b>  {</b></p><p><b>  if (T)</b></p><p><b>  {</b></p><p>  cout<<" "

38、;<<T->data.key;</p><p><b>  n++;</b></p><p>  N_PreOrderAVL(T->lchild);</p><p>  N_PreOrderAVL(T->rchild);</p><p><b>  }</b></

39、p><p><b>  }</b></p><p>  Status k_ey[40],k=0;</p><p>  void Key_PreOrderAVL(BSTree T)//先序遍歷(根,左,右)</p><p><b>  {</b></p><p><b>

40、  if (T)</b></p><p><b>  {</b></p><p><b>  if(k<n)</b></p><p><b>  {</b></p><p>  k_ey[k]=T->data.key;</p><p&

41、gt;<b>  k++;</b></p><p><b>  }</b></p><p>  Key_PreOrderAVL(T->lchild);</p><p>  Key_PreOrderAVL(T->rchild);</p><p><b>  }</b>

42、</p><p><b>  }</b></p><p>  int PreorderAVL(BSTree T)</p><p><b>  {</b></p><p><b>  if (T)</b></p><p><b>  {</

43、b></p><p>  cout<<T->data.key<<" ";</p><p>  PreorderAVL(T->lchild);</p><p>  PreorderAVL(T->rchild);</p><p><b>  }</b>&l

44、t;/p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  void R_Rotate(BSTree &p) { // 算法 9.9</p><p>  // 對以*p為根的二叉排序樹作右旋處理,處理之后p指向新的樹根結(jié)點,</

45、p><p>  // 即旋轉(zhuǎn)處理之前的左子樹的根結(jié)點</p><p>  BSTree lc;</p><p>  lc = p->lchild; // lc指向*p的左子樹根結(jié)點</p><p>  p->lchild = lc->rchild; // lc的右子樹掛接為*p的左子樹</p&g

46、t;<p>  lc->rchild = p; p = lc; // p指向新的根結(jié)點</p><p>  } // R_Rotate</p><p>  void L_Rotate(BSTree &p) { // 算法 9.10</p><p>  // 對以p↑為根的二叉排序樹作左旋處理,處理之后p指向新的樹根結(jié)點,</

47、p><p>  // 即旋轉(zhuǎn)處理之前的右子樹的根結(jié)點</p><p>  BSTree rc;</p><p>  rc = p->rchild; // rc指向*p的右子樹根結(jié)點</p><p>  p->rchild = rc->lchild; // rc的左子樹掛接為*p的右子樹</p&g

48、t;<p>  rc->lchild = p; p = rc; // p指向新的根結(jié)點</p><p>  } // L_Rotate</p><p>  void LeftBalance(BSTree &T) { // 算法 9.12</p><p>  // 對以指針T所指結(jié)點為根的二叉樹作左平衡旋轉(zhuǎn)處理。</p>

49、<p>  // 本算法結(jié)束時,指針T指向新的根結(jié)點</p><p>  BSTree lc,rd;</p><p>  lc = T->lchild; // lc指向*T的左子樹根結(jié)點</p><p>  switch (lc->bf) { // 檢查*T的左子樹的平衡度,并作相應(yīng)平衡處理</p><p>

50、  case LH: // 新結(jié)點插入在*T的左孩子的左子樹上,要作單右旋處理</p><p>  T->bf = lc->bf = EH; </p><p>  R_Rotate(T); </p><p><b>  break; </b></p><p>  case RH: // 新

51、結(jié)點插入在*T的左孩子的右子樹上,要作雙旋處理</p><p>  rd = lc->rchild; // rd指向*T的左孩子的右子樹根</p><p>  switch (rd->bf) { // 修改*T及其左孩子的平衡因子</p><p>  case LH: T->bf = RH; lc->bf = EH; break;&

52、lt;/p><p>  case EH: T->bf = lc->bf = EH; break;</p><p>  case RH: T->bf = EH; lc->bf = LH; break;</p><p>  } // switch (rd->bf)</p><p>  rd->bf

53、= EH; </p><p>  L_Rotate(T->lchild); // 對*T的左子樹作左旋平衡處理</p><p>  R_Rotate(T); // 對*T作右旋平衡處理</p><p>  } // switch (lc->bf) </p><p>  } // Lef

54、tBalance</p><p>  void RightBalance(BSTree &T) { // 算法 9.12</p><p>  // 對以指針T所指結(jié)點為根的二叉樹作右平衡旋轉(zhuǎn)處理。</p><p>  // 本算法結(jié)束時,指針T指向新的根結(jié)點</p><p>  BSTree rc,ld;</p>&l

55、t;p>  rc = T->rchild; // rc指向*T的右子樹根結(jié)點</p><p>  switch (rc->bf) { // 檢查*T的右子樹的平衡度,并作相應(yīng)平衡處理</p><p>  case RH: // 新結(jié)點插入在*T的右孩子的右子樹上,要作單右旋處理</p><p>  T->bf = rc->b

56、f = EH; </p><p>  L_Rotate(T); </p><p><b>  break; </b></p><p>  case LH: // 新結(jié)點插入在*T的右孩子的左子樹上,要作雙旋處理</p><p>  ld = rc->lchild; // ld指向*T的右孩子的左

57、子樹根</p><p>  switch (ld->bf) { // 修改*T及其右孩子的平衡因子</p><p>  case LH: T->bf = EH; rc->bf = RH; break;</p><p>  case EH: T->bf = rc->bf = EH; break;</p>&

58、lt;p>  case RH: T->bf = LH; rc->bf = EH; break;</p><p>  } // switch (rd->bf)</p><p>  ld->bf = EH; </p><p>  R_Rotate(T->rchild); // 對*T的右子樹作右旋平衡處

59、理</p><p>  L_Rotate(T); // 對*T作左旋平衡處理</p><p>  } // switch (lc->bf) </p><p>  } // LeftBalance</p><p>  Status InsertAVL(BSTree &T, ElemType e, Status &

60、amp;taller) { // 算法9.11</p><p>  // 若在平衡的二叉排序樹T中不存在和e有相同關(guān)鍵字的結(jié)點,</p><p>  // 則插入一個數(shù)據(jù)元素為e的新結(jié)點,并返回1,否則返回0。</p><p>  // 若因插入而使二叉排序樹失去平衡,則作平衡旋轉(zhuǎn)處理,</p><p>  // 布爾變量taller反映T長

61、高與否</p><p>  if (!T) { // 插入新結(jié)點,樹"長高",置taller為TRUE</p><p>  T = (BSTree) malloc (sizeof(BSTNode)); T->data = e;</p><p>  T->lchild = T->rchild = NULL; T->bf

62、 = EH; taller = TRUE;</p><p><b>  }</b></p><p><b>  else {</b></p><p>  if (e.key==T->data.key) // 樹中已存在和e有相同關(guān)鍵字的結(jié)點</p><p>  { taller = F

63、ALSE; return 0; } // 則不再插入</p><p>  if ((e.key<T->data.key)) { // 應(yīng)繼續(xù)在*T的左子樹中進行搜索</p><p>  if (InsertAVL(T->lchild, e, taller)==0) return 0; // 未插入</p><p>  if (tall

64、er) // 已插入到*T的左子樹中且左子樹"長高"</p><p>  switch (T->bf) { // 檢查*T的平衡度</p><p>  case LH: // 原本左子樹比右子樹高,需要作左平衡處理</p><p>  LeftBalance(T); taller = FALSE; break;</p&

65、gt;<p>  case EH: // 原本左、右子樹等高,現(xiàn)因左子樹增高而使樹增高</p><p>  T->bf = LH; taller = TRUE; break;</p><p>  case RH: // 原本右子樹比左子樹高,現(xiàn)左、右子樹等高</p><p>  T->bf = EH; taller = FAL

66、SE; break; </p><p>  } // switch (T->bf)</p><p><b>  } // if</b></p><p>  else { // 應(yīng)繼續(xù)在T↑的右子樹中進行搜索</p><p>  if (InsertAVL(T->rchild, e, taller)

67、==0) return 0;</p><p>  if (taller) // 已插入到*T的右子樹且右子樹長高</p><p>  switch (T->bf) { // 檢查*T的平衡度</p><p>  case LH: // 原本左子樹比右子樹高,現(xiàn)左、右子樹等高</p><p>  T->bf =

68、 EH; taller = FALSE; break; </p><p>  case EH: // 原本左、右子樹等高,現(xiàn)因右子樹增高而使樹增高</p><p>  T->bf = RH; taller = TRUE; break;</p><p>  case RH: // 原本右子樹比左子樹高,需要作右平衡處理</p>

69、<p>  RightBalance(T); taller = FALSE; break;</p><p>  } // switch (T->bf)</p><p><b>  } // else</b></p><p>  } // else </p><p><b>  return

70、1;</b></p><p>  } //InsertAVL</p><p>  Status Delete(BSTree &p) { // 算法9.8</p><p>  // 從二叉排序樹中刪除結(jié)點p,并重接它的左或右子樹</p><p>  BSTree q, s;</p><p>  if

71、 (!p->rchild) { // 右子樹空則只需重接它的左子樹</p><p>  q = p; p = p->lchild; free(q);</p><p>  } else if (!p->lchild) { // 只需重接它的右子樹</p><p>  q = p; p = p->rchild; free(q);<

72、;/p><p>  } else { // 左右子樹均不空</p><p>  q = p; s = p->lchild;</p><p>  while (s->rchild) // 轉(zhuǎn)左,然后向右到盡頭</p><p>  { q = s; s = s->rchild; }</p><p>

73、  p->data = s->data; // s指向被刪結(jié)點的“后繼”</p><p>  if (q != p) q->rchild = s->lchild; // 重接*q的右子樹</p><p>  else q->lchild = s->lchild; // 重接*q的左子樹</p>

74、;<p>  free(s); </p><p><b>  }</b></p><p>  return TRUE;</p><p>  } // Delete</p><p>  Status DeleteBST(BSTree &T, Status key) { // 算法9.7 <

75、;/p><p>  // 若二叉排序樹T中存在關(guān)鍵字等于key的數(shù)據(jù)元素時,</p><p>  // 則刪除該數(shù)據(jù)元素結(jié)點p,并返回TRUE;否則返回FALSE</p><p>  if (!T) return FALSE; // 不存在關(guān)鍵字等于key的數(shù)據(jù)元素</p><p><b>  else {</b>

76、;</p><p>  if (key==T->data.key) // 找到關(guān)鍵字等于key的數(shù)據(jù)元素</p><p>  return Delete(T); </p><p>  else if (key<T->data.key) return DeleteBST(T->lchild, key);</p><p>

77、;  else return DeleteBST(T->rchild, key);</p><p><b>  }</b></p><p>  } // DeleteBST</p><p><b>  主函數(shù)代碼</b></p><p>  #include"AVL.h"&

78、lt;/p><p>  int main()</p><p><b>  {</b></p><p>  Status i,j,t,r=0,e,num;</p><p>  ElemType avl;</p><p>  //TElemType ;</p><p>  Stat

79、us taller=0;</p><p>  BSTree A=NULL,B=NULL,AVL=NULL;</p><p>  cout<<" AVL樹的實現(xiàn) \n";</p><p>  cout<<"*******************************\n&quo

80、t;;</p><p>  cout<<"* 1、輸入數(shù)據(jù),建立AVL樹 *\n";</p><p>  cout<<"* 2、輸入數(shù)據(jù),建立BST樹 *\n";</p><p>  //cout<<"* 3、判斷二元樹是否為AVL樹 *\n";

81、</p><p>  cout<<"* 0、退出系統(tǒng) *\n";</p><p>  cout<<"*******************************\n";</p><p>  cout<<"請輸入選擇:";</p>

82、;<p><b>  cin>>i;</b></p><p>  while (i!=0)</p><p><b>  {</b></p><p><b>  if (i==1)</b></p><p><b>  {</b>&l

83、t;/p><p>  cout<<" AVL樹的簡單操作 \n";</p><p>  cout<<"******************************\n";</p><p>  cout<<"* 1、建立AVL樹,先序遍歷 *\n&qu

84、ot;;</p><p>  cout<<"* 2、刪除結(jié)點 *\n";</p><p>  cout<<"* 3、插入結(jié)點 *\n";</p><p>  cout<<"* 4、查找結(jié)點 *

85、\n";</p><p>  cout<<"* 0、退出本操作 *\n";</p><p>  cout<<"******************************\n";</p><p>  cout<<"請輸入選擇:";<

86、;/p><p><b>  cin>>j;</b></p><p>  while (j!=0)</p><p><b>  {</b></p><p><b>  if (j==1)</b></p><p><b>  {</b

87、></p><p>  cout<<"請你輸入AVL樹的節(jié)點數(shù)目:\n";</p><p><b>  cin>>num;</b></p><p>  cout<<"請輸入數(shù)據(jù):";</p><p>  while (num!=0)<

88、/p><p><b>  {</b></p><p>  cin>>avl.key;</p><p>  InsertAVL(A, avl, taller);</p><p><b>  num--;</b></p><p><b>  }</b>

89、;</p><p>  cout<<"先序遍歷結(jié)果";</p><p>  PreorderAVL(A);</p><p>  cout<<"\n\n";</p><p><b>  }</b></p><p>  else if (

90、j==2)</p><p><b>  {</b></p><p>  cout<<"輸入想要刪除的數(shù)據(jù):";</p><p><b>  cin>>t;</b></p><p>  DeleteBST(A,t);</p><p>

91、  N_PreOrderAVL(A);</p><p>  Key_PreOrderAVL(A);</p><p><b>  num=0;</b></p><p><b>  A=NULL;</b></p><p>  while (num<n)</p><p>&l

92、t;b>  {</b></p><p>  avl.key = k_ey[num];</p><p>  InsertAVL(A, avl, taller);</p><p><b>  num++;</b></p><p><b>  }</b></p><p

93、>  //PreorderAVL(A);</p><p>  cout<<"\n\n";</p><p><b>  }</b></p><p>  else if (j==3)</p><p><b>  {</b></p><p> 

94、 cout<<"輸入想要插入的數(shù)據(jù):";</p><p>  cin>>avl.key;</p><p>  InsertAVL(A, avl, taller);</p><p>  PreorderAVL(A);</p><p>  cout<<"\n\n";<

95、;/p><p><b>  }</b></p><p>  else if (j==4)</p><p><b>  {</b></p><p>  cout<<"輸入想要查找的數(shù)據(jù):";</p><p>  cin>>avl.key;

96、</p><p>  if(SearchBST(A, avl.key, NULL, AVL))</p><p>  cout<<"查找成功,資料數(shù)據(jù)為"<<AVL->data.key<<endl;</p><p><b>  else </b></p><p>

97、;  cout<<"此樹中沒有"<<avl.key<<"元素"<<endl;</p><p>  cout<<"\n\n";</p><p><b>  }</b></p><p><b>  else</b&

98、gt;</p><p><b>  {</b></p><p>  cout<<"操作失??!\n";</p><p><b>  }</b></p><p>  cout<<" AVL樹的簡單操作 \n";&l

99、t;/p><p>  cout<<"******************************\n";</p><p>  cout<<"* 1、建立AVL樹,先序遍歷 *\n";</p><p>  cout<<"* 2、刪除結(jié)點 *\n&q

100、uot;;</p><p>  cout<<"* 3、插入結(jié)點 *\n";</p><p>  cout<<"* 4、查找結(jié)點 *\n";</p><p>  cout<<"* 0、退出本操作 *

101、\n";</p><p>  cout<<"******************************\n";</p><p>  cout<<"請繼續(xù)在子目錄中選擇:";</p><p><b>  cin>>j;</b></p><p

102、><b>  }</b></p><p><b>  A=NULL;</b></p><p><b>  }</b></p><p>  else if (i==2)</p><p><b>  {</b></p><p> 

103、 cout<<" BST樹的簡單操作 \n";</p><p>  cout<<"******************************\n";</p><p>  cout<<"* 1、建立BST樹,先序遍歷 *\n";</p><

104、p>  cout<<"* 2、判斷BST樹是否為AVL樹 *\n";</p><p>  cout<<"* 3、將BST樹轉(zhuǎn)換為AVL樹 *\n";</p><p>  cout<<"* 0、退出本操作 *\n";</p><p

105、>  cout<<"******************************\n";</p><p>  cout<<"請繼續(xù)在目錄中選擇:";</p><p><b>  cin>>e;</b></p><p>  while(e!=0)</p>

106、<p><b>  {</b></p><p><b>  if(e==1)</b></p><p><b>  {</b></p><p>  cout<<"請你輸入BST樹的節(jié)點數(shù)目:\n";</p><p><b>

107、  cin>>num;</b></p><p>  cout<<"請輸入數(shù)據(jù):";</p><p>  while (num!=0)</p><p><b>  {</b></p><p>  cin>>avl.key;</p><p

108、>  InsertBST(B, avl);</p><p><b>  num--;</b></p><p><b>  }</b></p><p>  cout<<"先序遍歷結(jié)果:\n";</p><p>  PreorderAVL(B);</p>

109、<p>  cout<<"\n\n";</p><p><b>  }</b></p><p>  else if(e==2)</p><p><b>  {</b></p><p>  if(Balance(B))</p><p&g

110、t;  cout<<"此BST樹是AVL樹";</p><p><b>  else</b></p><p>  cout<<"此BST樹不是AVL樹";</p><p>  cout<<"\n\n";</p><p><

111、;b>  }</b></p><p>  else if(e==3)</p><p><b>  {</b></p><p>  N_PreOrderAVL(B);</p><p>  Key_PreOrderAVL(B);</p><p><b>  num=0;&l

112、t;/b></p><p><b>  B=NULL;</b></p><p>  while (num<n)</p><p><b>  {</b></p><p>  avl.key = k_ey[num];</p><p>  InsertAVL(B, av

113、l, taller);</p><p><b>  num++;</b></p><p><b>  }</b></p><p>  //PreorderAVL(B);</p><p>  cout<<"\n\n";</p><p><b

114、>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"操作失敗!\n";</p><p><b>  }</b></p><

115、p>  cout<<" BST樹的簡單操作 \n";</p><p>  cout<<"******************************\n";</p><p>  cout<<"* 1、建立BST樹,先序遍歷 *\n";</p>

116、<p>  cout<<"* 2、判斷BST樹是否為AVL樹 *\n";</p><p>  cout<<"* 3、將BST樹轉(zhuǎn)換為AVL樹 *\n";</p><p>  cout<<"* 0、退出本操作 *\n";</p>

117、<p>  cout<<"******************************\n";</p><p>  cout<<"請繼續(xù)在目錄中選擇:";</p><p><b>  cin>>e;</b></p><p><b>  }</

118、b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"操作失敗!\n";</p><p><b&g

119、t;  }</b></p><p>  cout<<" AVL樹的實現(xiàn) \n";</p><p>  cout<<"*******************************\n";</p><p>  cout<<"* 1、

120、輸入數(shù)據(jù),建立AVL樹 *\n";</p><p>  cout<<"* 2、輸入數(shù)據(jù),建立BST樹 *\n";</p><p>  //cout<<"* 3、判斷二元樹是否為AVL樹 *\n";</p><p>  cout<<"* 0、退出系

121、統(tǒng) *\n";</p><p>  cout<<"*******************************\n";</p><p>  cout<<"請繼續(xù)在主目錄中選擇:";</p><p><b>  cin>>i;</b>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論