C++如何實現樹的遍歷功能

這篇文章給大家分享的是有關C++如何實現樹的遍歷功能的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

10年積累的成都網站建設、網站設計經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站制作后付款的網站建設流程,更有梅縣免費網站建設讓你可以放心的選擇與我們合作。

具體如下:

遞歸是把問題轉化為規模縮小的同類問題,然后迭代調用函數(或過程)求得問題的解。遞歸函數就是直接或間接調用自身的函數。

遞歸兩要素:遞歸關系和遞歸邊界(終止條件),遞歸關系確定了迭代的層次結構,需要深入了解并分解問題;終止條件保證了程序的有窮性。

遞歸的應用有很多,常見的包括:階乘運算、斐波那契數列、漢諾塔、數的遍歷,還有大名鼎鼎的快排等等。理論上,遞歸問題都可以由多層循環來實現。遞歸的每次調用都會消耗一定的棧空間,效率要稍低于循環實現,但遞歸使函數更加簡潔,極大地增加了程序的可讀性。這里介紹漢諾塔和樹的遍歷兩種應用。

漢諾塔(hanoi)

有三根相鄰的柱子,標號為A,B,C,A柱子上從下到上按金字塔狀疊放著n個不同大小的圓盤,要把所有盤子一個一個移動到柱子C上,并且每次移動同一根柱子上都不能出現大盤子在小盤子上方。

C++如何實現樹的遍歷功能

遞歸規則:先把a上的n-1個搬到b上,再把a上第n個搬到c,然后把b上的n-1個搬到c上;終止條件是n=0。

/*
 *說明:目標:把n個盤子從a往c搬
 */
void hanoi(int n, char a,char b,char c)
{
  if(n>0)
  {
    hanoi(n-1,a,c,b);
    cout<<a<<"->"<<c<<endl;
    hanoi(n-1,b,a,c);
  }
}
void main()
{
  hanoi(4,'A','B','C');
}

這樣程序便十分簡潔的實現了看似復雜的功能,下面再看一個經典的問題:

遍歷二叉樹

二叉樹的遍歷是指從根節點出發,按照某種次序依次訪問二叉樹中的所有結點,使得每個結點被訪問一次且僅被訪問一次。遍歷方法有四種:前序遍歷(先訪問根節點,然后前序遍歷左子樹,最后前序遍歷右子樹)、中序遍歷(左子樹->根節點->右子樹)、后序遍歷(左子樹->右子樹->根節點)和層序遍歷(每一層自左向右,各層自上向下訪問)。

可見前三種遍歷方法的定義就體現了遞歸的思想,算法實現如下:

//前序遍歷
void PreorderTra(BiTree T)
{
  if(T == NULL)
  {
    return;
  }
  printf("%c",T->data);//輸出結點數據,可更改為其他對結點的操作
  PreorderTra(T->lchild);//前序遍歷左子樹
  PreorderTra(T->rchild);//前序遍歷右子樹
}
//中序遍歷
void InorderTra(BiTree T)
{
  if(T == NULL)
  {
    return;
  }
  InorderTra(T->lchild);//中序遍歷左子樹
  printf("%c",T->data);//輸出結點數據,可更改為其他對結點的操作
  InorderTra(T->rchild);//中序遍歷右子樹
}
//后序遍歷
void PostorderTra(BiTree T)
{
  if(T == NULL)
  {
    return;
  }
  PostorderTra(T->lchild);//后序遍歷左子樹
  PostorderTra(T->rchild);//后序遍歷右子樹
  printf("%c",T->data);//輸出結點數據,可更改為其他對結點的操作
}

其中二叉樹的結構如下:

typedef struct BiTNode
{
  ElemType data;
  struct BiTNode *lchild,*rchild;
}BitNode,*BiTree;

感謝各位的閱讀!關于“C++如何實現樹的遍歷功能”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

當前名稱:C++如何實現樹的遍歷功能
文章出自:http://m.kartarina.com/article30/jedppo.html

成都網站建設公司_創新互聯,為您提供移動網站建設服務器托管靜態網站響應式網站標簽優化全網營銷推廣

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

手機網站建設
主站蜘蛛池模板: 亚洲日韩看片无码电影| 亚洲国产精品无码久久九九大片 | 亚洲成AV人在线观看天堂无码| 精品无码一区二区三区水蜜桃| 亚洲欧洲日产国码无码久久99| 91久久精品无码一区二区毛片 | 亚洲va中文字幕无码| 中文字幕无码av激情不卡久久| 无码中文字幕日韩专区| 永久免费无码日韩视频| 99久久人妻无码精品系列| 国产亚洲大尺度无码无码专线| 亚洲av无码成人精品国产| 亚洲AV无码一区二区乱孑伦AS| 在线精品免费视频无码的| 精品无码一区在线观看| 日韩人妻无码一区二区三区综合部| 中文AV人妻AV无码中文视频 | 人妻无码一区二区三区免费| 一区二区三区无码高清| 亚洲精品无码你懂的| 无码精品人妻一区二区三区人妻斩| 久久久久亚洲?V成人无码| 国产精品亚洲а∨无码播放不卡 | 日韩精品无码一本二本三本| 无码精品蜜桃一区二区三区WW| 亚洲youwu永久无码精品| 曰产无码久久久久久精品| 久久久久亚洲AV无码专区体验 | 亚洲AV无码一区二区三区性色 | 亚洲VA中文字幕无码毛片| 久久无码精品一区二区三区| 在线精品免费视频无码的| 国产午夜激无码av毛片| 久久无码av亚洲精品色午夜 | 亚洲一区二区三区国产精品无码| 亚洲日韩精品A∨片无码| 国产在线无码一区二区三区视频| 国产精品无码无卡在线播放| 亚洲av中文无码乱人伦在线咪咕| 最新无码A∨在线观看|