數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----二叉樹(shù)平衡的判定_第1頁(yè)
已閱讀1頁(yè),還剩14頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  數(shù)據(jù)結(jié)構(gòu)與算法</b></p><p><b>  課程設(shè)計(jì)報(bào)告</b></p><p>  課程設(shè)計(jì)題目: 二叉樹(shù)平衡的判定 </p><p>  專(zhuān)業(yè)班級(jí): 信息與計(jì)算科學(xué)1001班

2、 </p><p><b>  一、摘要:</b></p><p>  基于我們對(duì)C語(yǔ)言和數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)我們有能力編寫(xiě)處理一些比較基本而又簡(jiǎn)單的問(wèn)題。在我們此題我們的目標(biāo)就是任意給出一個(gè)二叉樹(shù)我們判斷是否為平衡的二叉樹(shù)。</p><p>  我們?cè)趯W(xué)習(xí)計(jì)算機(jī)語(yǔ)言類(lèi)的知識(shí)時(shí)當(dāng)然要注重理論知識(shí)的學(xué)習(xí),但是我們要明確我們學(xué)習(xí)

3、的是計(jì)算機(jī)語(yǔ)言,由于課程的性質(zhì)就決定了我們必須將我們?cè)谡n本中學(xué)到的知識(shí)在計(jì)算機(jī)上運(yùn)行并且自己能編寫(xiě)一些比較簡(jiǎn)單的程序,這才是我們學(xué)習(xí)計(jì)算機(jī)語(yǔ)言的最終目的而不是滿(mǎn)足于理解一個(gè)理論會(huì)算一個(gè)題。因而我們將要抓住這樣一個(gè)鍛煉的機(jī)會(huì)</p><p>  所謂平衡二叉樹(shù),它或者是一顆空樹(shù)或者是具有下列性質(zhì)的二叉樹(shù):它的左右子樹(shù)都是平衡二叉樹(shù),且左右子樹(shù)的深度之差得絕對(duì)值不超過(guò)1。</p><p>  

4、在我們這個(gè)判定任意給定的二叉樹(shù)的題中。我們處理這道題的主要的思路是:首先按先序和中序或者按中序和后序的方式將我們所要判斷的二叉樹(shù)輸入進(jìn)入,目的是要得到一個(gè)明確的二叉樹(shù)的結(jié)構(gòu)準(zhǔn)確的判斷二叉樹(shù)是否平衡。在我們判斷二叉樹(shù)的平衡中我們將分別考慮二叉樹(shù)左右子樹(shù)的是不是為平衡二叉樹(shù),依次得到左右子樹(shù)的深度,判斷左右子樹(shù)的平衡性。</p><p>  在我們的設(shè)計(jì)思路中我們將用到不同的樹(shù)的遍歷方式。</p>&l

5、t;p><b>  二、問(wèn)題重?cái)ⅲ?lt;/b></p><p>  平衡二叉樹(shù)的判斷,設(shè)計(jì)要求給定一個(gè)先序或者后序的遍歷結(jié)果,判斷其是否為二叉樹(shù)。</p><p><b>  問(wèn)題分析:</b></p><p>  在處理二叉樹(shù)平衡的判斷的問(wèn)題中。我們需要將分別考慮二叉樹(shù)的左右子樹(shù)的平衡問(wèn)題只要左右子樹(shù)確定為平衡二叉樹(shù),

6、而且左右子樹(shù)的深度的絕對(duì)值之差不大于1,那么我們得到的就是一顆平衡的二叉樹(shù)。</p><p>  我們將先通過(guò)前序和中序或者中序和后序?qū)⑺袛嗟亩鏄?shù)輸入。建立一個(gè)明確的二叉樹(shù)在此基礎(chǔ)上判斷二叉樹(shù)是否為平衡二叉樹(shù)。</p><p>  我們先建立一個(gè)二叉樹(shù)并用前序和中序或者中序和后序遍歷的方式將我們輸入的樹(shù)的元素輸入得到一個(gè)明確的樹(shù)的結(jié)構(gòu)。</p><p><

7、;b>  三、流程圖如下:</b></p><p><b>  四、模塊分析:</b></p><p>  1、定義一個(gè)結(jié)構(gòu)體存儲(chǔ)各節(jié)點(diǎn)的信息,并且用遞歸的方法存儲(chǔ)左右子樹(shù)的信息</p><p>  typedef struct BINTREE</p><p><b>  {</b>

8、;</p><p>  char chData;</p><p>  struct BINTREE * pbLChild;</p><p>  struct BINTREE * pbRChild;</p><p>  } BinTree, * pBinTree;</p><p>  2、分別得到樹(shù)的深度以及左右子

9、樹(shù)的深度</p><p>  int BT_GetTreeDepth( pBinTree pbTree )</p><p><b>  {</b></p><p><b>  //存儲(chǔ)樹(shù)總的深度</b></p><p>  int iDepthTotal = 0;</p><p&

10、gt;  //存儲(chǔ)左子樹(shù)的深度</p><p>  int iDepthLeft = 0;</p><p>  //存儲(chǔ)右子樹(shù)的深度</p><p>  int iDepthRight = 0;</p><p>  if ( pbTree == NULL )</p><p><b>  {</b>

11、</p><p>  iDepthTotal = 0;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  // 左孩子的深度</p><

12、p>  iDepthLeft = BT_GetTreeDepth( pbTree->pbLChild );</p><p>  // 右孩子的深度</p><p>  iDepthRight = BT_GetTreeDepth( pbTree->pbRChild );</p><p>  // 去左右孩子深度的最大值,1代表著根節(jié)點(diǎn) </p

13、><p>  iDepthTotal = 1 + ( iDepthLeft > iDepthRight ? iDepthLeft : iDepthRight );</p><p><b>  }</b></p><p>  return iDepthTotal;</p><p><b>  }</b&g

14、t;</p><p>  3、判斷左右子樹(shù)是不是為平衡二叉樹(shù)</p><p>  bool BT_IsBalanceTree( pBinTree pbTree )</p><p><b>  {</b></p><p><b>  //如果樹(shù)不是空的</b></p><p>

15、  if( pbTree != NULL )</p><p><b>  {</b></p><p>  //存儲(chǔ)左孩子的深度</p><p>  int iLeftDepth = 0;</p><p>  //存儲(chǔ)右孩子的深度</p><p>  int iRightDepth = 0;<

16、/p><p>  //得到左孩子的深度</p><p>  iLeftDepth = BT_GetTreeDepth( pbTree->pbLChild );</p><p>  //得到右孩子的深度</p><p>  iRightDepth = BT_GetTreeDepth( pbTree->pbRChild );</p&

17、gt;<p>  //判斷樹(shù)是不是平衡二叉樹(shù) 平衡二叉樹(shù)的左右孩子的深度絕對(duì)值只差不大于</p><p>  if (( iLeftDepth - iRightDepth >= -1 ) && ( iLeftDepth - iRightDepth <= 1 ))</p><p><b>  {</b></p>

18、<p>  // 判斷左子樹(shù)是不是平衡的</p><p>  BT_IsBalanceTree( pbTree->pbLChild );</p><p>  //判斷右子樹(shù)是不是平衡的</p><p>  BT_IsBalanceTree( pbTree->pbRChild );</p><p><b>  

19、}</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  return false;</p><p><b>  }</b></p><p><b>  }</b&g

20、t;</p><p><b>  else</b></p><p><b>  {</b></p><p>  return false;</p><p><b>  }</b></p><p>  return true;</p><

21、;p><b>  }</b></p><p><b>  4、輸入各節(jié)點(diǎn)元素</b></p><p>  bool BT_PreInToTree( pBinTree & pbTree, char * szInOrder, char * szPreOrder, int iInLeft, int iInRight, int iPreLe

22、ft, int iPreRight )</p><p>  BT_PreInToTree( pbTree->pbLChild, szInOrder, szPreOrder, iInLeft, iCurPos - 1, iPreLeft + 1, iPreLeft + iLegnthLeft );</p><p><b>  5、前序遍歷二叉樹(shù)</b></p

23、><p>  void BT_PreOrder( pBinTree pbTree ) </p><p><b>  { </b></p><p>  if ( pbTree != NULL )</p><p><b>  {</b></p><p>  // The preord

24、er traversal is, root, left child, right child</p><p>  printf( "%c ", pbTree->chData ); </p><p>  BT_PreOrder ( pbTree->pbLChild );</p><p>  BT_PreOrder ( pbTree-&g

25、t;pbRChild );</p><p><b>  } </b></p><p><b>  }</b></p><p><b>  6、后序遍歷二叉樹(shù)</b></p><p>  void BT_PostOrder( pBinTree pbTree ) </p>

26、;<p><b>  { </b></p><p>  if ( pbTree != NULL )</p><p><b>  {</b></p><p>  // The postorder traversal is, left child, right child, root</p><

27、;p>  BT_PostOrder ( pbTree->pbLChild ) ;</p><p>  BT_PostOrder ( pbTree->pbRChild ) ; </p><p>  printf( "%c ", pbTree->chData );</p><p><b>  } </b>

28、</p><p><b>  }</b></p><p><b>  7、主函數(shù)</b></p><p>  void main()</p><p><b>  {</b></p><p>  char szPre [100] = "&quo

29、t;;</p><p>  char szMid [100] = "";</p><p>  char szPost [100] = "";</p><p>  pBinTree pbPreInTree;</p><p>  pBinTree pbPostInTree;</p><

30、;p> ?。?)選用前序和后序的輸出方式,并判斷是不是平衡二叉樹(shù)</p><p>  printf("請(qǐng)輸入前序序列:\n");</p><p>  scanf("%s",&szPre);</p><p>  printf( "請(qǐng)輸入中序序列:\n");</p><p>

31、;  scanf("%s",&szMid);</p><p>  bool bCorrect = BT_PreInToTree( pbPreInTree, szMid, szPre, 0, strlen(szMid)-1, 0, strlen(szPre)-1 );</p><p>  if ( bCorrect )</p><p>  

32、{printf("該樹(shù)的后序序列為:\n");</p><p>  BT_PostOrder( pbPreInTree );</p><p>  if ( BT_IsBalanceTree( pbPreInTree ))</p><p>  {printf("該樹(shù)是平衡二叉樹(shù)");</p><p>&l

33、t;b>  }</b></p><p><b>  else</b></p><p>  {printf("這個(gè)不是平衡二叉樹(shù)");</p><p><b>  }</b></p><p><b>  }</b></p>&l

34、t;p><b>  else</b></p><p>  {printf("不要亂輸,前序與中序不匹配");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  break;</b

35、></p><p>  (2)選用中序和后序輸入方式,并判斷是不是平衡二叉樹(shù)</p><p>  {printf("請(qǐng)輸入中序序列:\n");</p><p>  scanf("%s",&szMid) ;</p><p>  printf("請(qǐng)輸入后序序列:\n");&

36、lt;/p><p>  scanf("%s",&szPost);</p><p>  bool bCorrect = BT_InPostToTree( pbPostInTree, szMid, szPost, 0, strlen(szMid)-1, 0, strlen(szPost)-1 );</p><p>  if ( bCorrect

37、)</p><p>  {printf( "該樹(shù)的前序序列為:\n");</p><p>  BT_PreOrder( pbPostInTree );</p><p>  if ( BT_IsBalanceTree( pbPostInTree ))</p><p>  {printf("該樹(shù)是平衡二叉樹(shù)"

38、;); </p><p><b>  }</b></p><p><b>  else</b></p><p>  {printf("這個(gè)不是平衡二叉樹(shù)");</p><p><b>  }</b></p><p><b&g

39、t;  }</b></p><p><b>  else</b></p><p>  {printf("不要亂輸,中序與后序不匹配");</p><p><b>  }</b></p><p><b>  }</b></p><

40、;p><b>  break;</b></p><p><b>  default:</b></p><p>  {printf("不要亂選,不支持其他模式");</p><p><b>  }</b></p><p><b>  }<

41、/b></p><p><b>  }</b></p><p>  五、算法實(shí)現(xiàn)效果圖:</p><p><b>  選用輸入方式:</b></p><p><b>  中序</b></p><p><b>  后序輸入</b>

42、;</p><p><b>  得到結(jié)果</b></p><p>  5、輸入的中序和后序不匹配</p><p><b>  6、得到正確的結(jié)果</b></p><p><b>  六、總結(jié):</b></p><p>  在此次課程設(shè)計(jì)過(guò)程中我們成功的利

43、用樹(shù)的遍歷以及二叉樹(shù)成立的條件判斷了隨意的二叉樹(shù)是為平衡二叉樹(shù)。</p><p>  其實(shí)在于計(jì)算機(jī)語(yǔ)言這類(lèi)課程看重的就是上機(jī)的實(shí)際操作,不滿(mǎn)足于基本理論的學(xué)習(xí)。上機(jī)操作才能讓我們更加好的掌握我們所要學(xué)習(xí)的計(jì)算機(jī)語(yǔ)言知識(shí)。</p><p>  我們?cè)诖舜纬绦蛟O(shè)計(jì)中首先分析問(wèn)題所要的關(guān)鍵然后找到題目所涉及的知識(shí)點(diǎn),了解知識(shí)的結(jié)構(gòu)在此基礎(chǔ)上選用正確的方法畫(huà)出我們解決問(wèn)題的流程圖。接著我們?cè)诹鞒?/p>

44、圖的基礎(chǔ)上編寫(xiě)代碼將我們所要實(shí)現(xiàn)的目的在計(jì)算機(jī)上實(shí)現(xiàn)。</p><p>  我們?cè)诮鉀Q我們問(wèn)題的過(guò)程中通過(guò)前序和中序或者中序和后序的方式將樹(shù)輸入,再將其以后序或者前序的方式將其輸出。在判斷是不是為平衡二叉樹(shù)時(shí)我們分別檢索左右子樹(shù)的深度判斷左右子樹(shù)是不是平衡二叉樹(shù),并且比較左右子樹(shù)的深度,看看它們之間的絕對(duì)值之差是不是小于1的。最終得到我們所輸入的二叉樹(shù)是不是平衡二叉樹(shù)。在我們輸入的過(guò)程中為了得到正確的結(jié)構(gòu),我們所

45、輸入的前序和中序必須是匹配的或者中序和后序是匹配的,只有這樣才能得到一個(gè)明確的樹(shù)的結(jié)構(gòu)。</p><p><b>  七、心得體會(huì):</b></p><p>  我們的專(zhuān)業(yè)決定了我們跟計(jì)算機(jī)結(jié)緣,這樣我們也就與計(jì)算機(jī)語(yǔ)言結(jié)緣啦。我們將會(huì)在以后的學(xué)習(xí)生涯中不斷學(xué)習(xí)計(jì)算機(jī)語(yǔ)言的知識(shí)。因而我們要懂得學(xué)習(xí)計(jì)算機(jī)語(yǔ)言的正確的方法這是才能事半功倍。</p><

46、p>  上機(jī)編程看起來(lái)是件很單調(diào)很無(wú)聊的事情,但是只要我們能夠沉下心來(lái),認(rèn)真的處理自己需要解決的問(wèn)題就能從這其中得到無(wú)窮的樂(lè)趣!!</p><p><b>  八、參考文獻(xiàn):</b></p><p>  劉玉龍 數(shù)據(jù)結(jié)構(gòu)與算法實(shí)用教程 電子工業(yè)出版社</p><p>  譚浩強(qiáng) C語(yǔ)言程序設(shè)計(jì) 清華大學(xué)出版社</p>

47、<p>  嚴(yán)蔚敏 數(shù)據(jù)結(jié)構(gòu) 清華大學(xué)出版社</p><p><b>  九、附錄</b></p><p><b>  源程序如下:</b></p><p>  #include<stdio.h></p><p>  #include<malloc.h> &

48、lt;/p><p>  #include<string.h> </p><p>  typedef struct BINTREE</p><p><b>  {</b></p><p>  char chData;</p><p>  struct BINTREE * pbLChil

49、d;</p><p>  struct BINTREE * pbRChild;</p><p>  } BinTree, * pBinTree;</p><p>  int BT_GetTreeDepth( pBinTree pbTree )</p><p><b>  {</b></p><p>

50、;<b>  //存儲(chǔ)樹(shù)總的深度</b></p><p>  int iDepthTotal = 0;</p><p>  //存儲(chǔ)左子樹(shù)的深度</p><p>  int iDepthLeft = 0;</p><p>  //存儲(chǔ)右子樹(shù)的深度</p><p>  int iDepthRight

51、 = 0;</p><p>  if ( pbTree == NULL )</p><p><b>  {</b></p><p>  iDepthTotal = 0;</p><p><b>  }</b></p><p><b>  else</b>

52、</p><p><b>  {</b></p><p>  // Depth of left child 左孩子的深度</p><p>  iDepthLeft = BT_GetTreeDepth( pbTree->pbLChild );</p><p>  // Depth of right child 右

53、孩子的深度</p><p>  iDepthRight = BT_GetTreeDepth( pbTree->pbRChild );</p><p>  // Get the max depth of left and right child, 1 means root node 去左右孩子深度的最大值,1代表著根節(jié)點(diǎn) </p><p>  iDepthTot

54、al = 1 + ( iDepthLeft > iDepthRight ? iDepthLeft : iDepthRight );</p><p><b>  }</b></p><p>  return iDepthTotal;</p><p><b>  }</b></p><p>  b

55、ool BT_IsBalanceTree( pBinTree pbTree )</p><p><b>  {</b></p><p>  // If tree is not empty 如果樹(shù)不是空的</p><p>  if( pbTree != NULL )</p><p><b>  {</b

56、></p><p>  // Store the left child depth 存儲(chǔ)左孩子的深度</p><p>  int iLeftDepth = 0;</p><p>  // Store the right child depth 存儲(chǔ)右孩子的深度</p><p>  int iRightDepth = 0;&

57、lt;/p><p>  // Get the left child depth 得到左孩子的深度</p><p>  iLeftDepth = BT_GetTreeDepth( pbTree->pbLChild );</p><p>  // Get the right child depth 得到右孩子的深度</p>&l

58、t;p>  iRightDepth = BT_GetTreeDepth( pbTree->pbRChild );</p><p>  // Judge the tree is balance tree or not 判斷樹(shù)是不是平衡二叉樹(shù) 平衡二叉樹(shù)的左右孩子的深度絕對(duì)值只差不大于1</p><p>  // The balance tree is the abstrac

59、t of left child depth reduce right child depth is equal or less than 1</p><p>  if (( iLeftDepth - iRightDepth >= -1 ) && ( iLeftDepth - iRightDepth <= 1 ))</p><p><b>  {<

60、/b></p><p>  // Judge the left child is balance too 判斷左子樹(shù)是不是平衡的</p><p>  BT_IsBalanceTree( pbTree->pbLChild );</p><p>  // Judge the right child is balance too 判斷右子樹(shù)是不是平衡的<

61、;/p><p>  BT_IsBalanceTree( pbTree->pbRChild );</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  retur

62、n false;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  return false;&

63、lt;/p><p><b>  }</b></p><p>  return true;</p><p><b>  }</b></p><p>  bool BT_PreInToTree( pBinTree & pbTree, char * szInOrder, char * szPreOrd

64、er, int iInLeft, int iInRight, int iPreLeft, int iPreRight )</p><p><b>  {</b></p><p>  // Create node 創(chuàng)建一個(gè)節(jié)點(diǎn)</p><p>  pbTree = new BinTree;</p><p> 

65、 pbTree->chData = szPreOrder[iPreLeft];</p><p>  pbTree->pbLChild= pbTree->pbRChild = NULL;</p><p>  // Store current position </p><p>  int iCurPos = iInLeft;</p>

66、<p>  // Find the node the same as pre order 找到先前已經(jīng)訪(fǎng)問(wèn)的節(jié)點(diǎn)</p><p>  while (( iCurPos <= iInRight ) && ( szInOrder[iCurPos] != szPreOrder[iPreLeft] ))</p><p><b>  {</b&

67、gt;</p><p>  iCurPos ++;</p><p><b>  }</b></p><p>  // If the current position is greater than the right border, return false</p><p>  if ( iCurPos > iIn

68、Right )</p><p><b>  {</b></p><p>  return false;</p><p><b>  }</b></p><p>  int iLegnthLeft = iCurPos - iInLeft;</p><p>  // If cur

69、rent position is greater than left, generate left child</p><p>  if ( iCurPos > iInLeft )</p><p><b>  {</b></p><p>  BT_PreInToTree( pbTree->pbLChild, szInOrder, s

70、zPreOrder, iInLeft, iCurPos - 1, iPreLeft + 1, iPreLeft + iLegnthLeft );</p><p><b>  }</b></p><p>  // if current position is less than right, generate right child</p><p&g

71、t;  if ( iCurPos < iInRight )</p><p><b>  {</b></p><p>  BT_PreInToTree( pbTree->pbRChild, szInOrder, szPreOrder, iCurPos + 1, iInRight, iPreLeft + iLegnthLeft + 1, iPreRight )

72、;</p><p><b>  }</b></p><p>  return true;</p><p><b>  }</b></p><p>  bool BT_InPostToTree( pBinTree & pbTree, char * szInOrder, char * szPos

73、tOrder, int iInLeft, int iInRight, int iPostLeft, int iPostRight )</p><p><b>  {</b></p><p>  // Create node</p><p>  pbTree = new BinTree;</p><p>  pbTre

74、e->chData = szPostOrder[iPostRight];</p><p>  pbTree->pbLChild = pbTree->pbRChild = NULL;</p><p>  // Store current position</p><p>  int iCurPos = iInLeft;</p><

75、p>  // Find the node the same as post order</p><p>  while ( iCurPos <= iInRight && szInOrder[ iCurPos ] != szPostOrder[ iPostRight ])</p><p><b>  {</b></p><

76、p>  iCurPos++;</p><p><b>  }</b></p><p>  // If the current position is greater than the right border, return false</p><p>  if ( iCurPos > iInRight ) </p>

77、<p><b>  {</b></p><p>  return false;</p><p><b>  }</b></p><p>  int iLengthLeft = iCurPos - iInLeft;</p><p>  // If the current position i

78、s greater than the left border, generate the left child</p><p>  if ( iCurPos > iInLeft )</p><p><b>  {</b></p><p>  BT_InPostToTree( pbTree->pbLChild, szInOrder,

79、szPostOrder, iInLeft, iCurPos - 1, iPostLeft, iPostLeft + iLengthLeft - 1);</p><p><b>  }</b></p><p>  // If the current position is less than the right border, generate the right ch

80、ild</p><p>  if ( iCurPos < iInRight )</p><p><b>  {</b></p><p>  BT_InPostToTree( pbTree->pbRChild, szInOrder, szPostOrder, iCurPos + 1, iInRight, iPostLeft + iLe

81、ngthLeft, iPostRight - 1);</p><p><b>  }</b></p><p>  return true;</p><p><b>  }</b></p><p>  void BT_PreOrder( pBinTree pbTree ) </p>&l

82、t;p><b>  { </b></p><p>  if ( pbTree != NULL )</p><p><b>  {</b></p><p>  // The preorder traversal is, root, left child, right child</p><p>

83、  printf( "%c ", pbTree->chData ); </p><p>  BT_PreOrder ( pbTree->pbLChild );</p><p>  BT_PreOrder ( pbTree->pbRChild );</p><p><b>  } </b></p>

84、<p><b>  }</b></p><p>  void BT_PostOrder( pBinTree pbTree ) </p><p><b>  { </b></p><p>  if ( pbTree != NULL )</p><p><b>  {</b

85、></p><p>  // The postorder traversal is, left child, right child, root</p><p>  BT_PostOrder ( pbTree->pbLChild ) ;</p><p>  BT_PostOrder ( pbTree->pbRChild ) ; </p>

86、<p>  printf( "%c ", pbTree->chData );</p><p><b>  } </b></p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b&g

87、t;</p><p>  char szPre [100] = "";</p><p>  char szMid [100] = "";</p><p>  char szPost [100] = "";</p><p>  pBinTree pbPreInTree;</

88、p><p>  pBinTree pbPostInTree;</p><p>  int iMode = 0;</p><p>  printf("請(qǐng)選擇生成二叉樹(shù)規(guī)則:前序和中序(0),后序和中序(1)\n");</p><p>  scanf("%d",&iMode);</p>

89、<p>  switch ( iMode )</p><p><b>  {</b></p><p><b>  case 0:</b></p><p><b>  {</b></p><p>  printf("請(qǐng)輸入前序序列:\n");<

90、;/p><p>  scanf("%s",&szPre);</p><p>  printf( "請(qǐng)輸入中序序列:\n");</p><p>  scanf("%s",&szMid);</p><p>  bool bCorrect = BT_PreInToTree( p

91、bPreInTree, szMid, szPre, 0, strlen(szMid)-1, 0, strlen(szPre)-1 );</p><p>  if ( bCorrect )</p><p>  {printf("該樹(shù)的后序序列為:\n");</p><p>  BT_PostOrder( pbPreInTree );</p&g

92、t;<p>  if ( BT_IsBalanceTree( pbPreInTree ))</p><p>  {printf("該樹(shù)是平衡二叉樹(shù)");</p><p><b>  }</b></p><p><b>  else</b></p><p>  {pr

93、intf("這個(gè)不是平衡二叉樹(shù)");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p>  {printf("不要亂輸,前序與中序不匹配");&l

94、t;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  case 1:</b></p><p>  {printf("請(qǐng)輸

95、入中序序列:\n");</p><p>  scanf("%s",&szMid) ;</p><p>  printf("請(qǐng)輸入后序序列:\n");</p><p>  scanf("%s",&szPost);</p><p>  bool bCorrect

96、 = BT_InPostToTree( pbPostInTree, szMid, szPost, 0, strlen(szMid)-1, 0, strlen(szPost)-1 );</p><p>  if ( bCorrect )</p><p>  {printf( "該樹(shù)的前序序列為:\n");</p><p>  BT_PreOrder

97、( pbPostInTree );</p><p>  if ( BT_IsBalanceTree( pbPostInTree ))</p><p>  {printf("該樹(shù)是平衡二叉樹(shù)"); </p><p><b>  }</b></p><p><b>  else</b&

98、gt;</p><p>  {printf("這個(gè)不是平衡二叉樹(shù)");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p>  {printf(

99、"不要亂輸,中序與后序不匹配");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  default:</b></p>

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論