最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++使用遞歸和非遞歸算法實現(xiàn)的二叉樹葉子節(jié)點個數(shù)計算方法

 更新時間:2017年05月13日 08:52:28   作者:難免有錯_  
這篇文章主要介紹了C++使用遞歸和非遞歸算法實現(xiàn)的二叉樹葉子節(jié)點個數(shù)計算方法,涉及C++二叉樹的定義、遍歷、統(tǒng)計相關操作技巧,需要的朋友可以參考下

本文實例講述了C++使用遞歸和非遞歸算法實現(xiàn)的二叉樹葉子節(jié)點個數(shù)計算方法。分享給大家供大家參考,具體如下:

/*求二叉樹葉子節(jié)點個數(shù) -- 采用遞歸和非遞歸方法
經(jīng)調(diào)試可運行源碼及分析如下:
***/
#include <stdlib.h>
#include <iostream>
#include <stack>
using std::cout;
using std::cin;
using std::endl;
using std::stack;
/*二叉樹結點定義*/
typedef struct BTreeNode
{
  char elem;
  struct BTreeNode *pleft;
  struct BTreeNode *pright;
}BTreeNode;
/*
求二叉樹葉子節(jié)點數(shù)
葉子節(jié)點:即沒有左右子樹的結點
遞歸方式步驟:
如果給定節(jié)點proot為NULL,則是空樹,葉子節(jié)點為0,返回0;
如果給定節(jié)點proot左右子樹均為NULL,則是葉子節(jié)點,且葉子節(jié)點數(shù)為1,返回1;
如果給定節(jié)點proot左右子樹不都為NULL,則不是葉子節(jié)點,以proot為根節(jié)點的子樹葉子節(jié)點數(shù)=proot左子樹葉子節(jié)點數(shù)+proot右子樹葉子節(jié)點數(shù)。
/*遞歸實現(xiàn)求葉子節(jié)點個數(shù)*/
int get_leaf_number(BTreeNode *proot)
{
  if(proot == NULL)
    return 0;
  if(proot->pleft == NULL && proot->pright == NULL)
    return 1;
  return (get_leaf_number(proot->pleft) + get_leaf_number(proot->pright));
}
/*非遞歸:本例采用先序遍歷計算
判斷當前訪問的節(jié)點是不是葉子節(jié)點,然后對葉子節(jié)點求和即可。
 **/
int preorder_get_leaf_number(BTreeNode* proot)
{
  if(proot == NULL)
    return 0;
  int num = 0;
  stack <BTreeNode*> st;
  while (proot != NULL || !st.empty())
  {
    while (proot != NULL)
    {
      cout << "節(jié)點:" << proot->elem << endl;
      st.push(proot);
      proot = proot->pleft;
    }
    if (!st.empty())
    {
      proot = st.top();
      st.pop();
      if(proot->pleft == NULL && proot->pright == NULL)
        num++;
      proot = proot -> pright;
    }
  }
  return num;
}
/*初始化二叉樹根節(jié)點*/
BTreeNode* btree_init(BTreeNode* &bt)
{
  bt = NULL;
  return bt;
}
/*先序創(chuàng)建二叉樹*/
void pre_crt_tree(BTreeNode* &bt)
{
  char ch;
  cin >> ch;
  if (ch == '#')
  {
    bt = NULL;
  }
  else
  {
    bt = new BTreeNode;
    bt->elem = ch;
    pre_crt_tree(bt->pleft);
    pre_crt_tree(bt->pright);
  }
}
int main()
{
  int tree_leaf_number = 0;
  BTreeNode *bt;
  btree_init(bt);//初始化根節(jié)點
  pre_crt_tree(bt);//創(chuàng)建二叉樹
  tree_leaf_number = get_leaf_number(bt);//遞歸
  cout << "二叉樹葉子節(jié)點個數(shù)為:" << tree_leaf_number << endl;
  cout << "非遞歸先序遍歷過程如下:" << endl;
  tree_leaf_number = preorder_get_leaf_number(bt);//非遞歸
  cout << "二叉樹葉子節(jié)點個數(shù)為:" << tree_leaf_number << endl;
  system("pause");
  return 0;
}
/*

運行結果:
a b c # # # d e # # f # #
---以上為輸入---
---以下為輸出---
二叉樹葉子節(jié)點個數(shù)為:3
非遞歸遍歷過程如下:
節(jié)點:a
節(jié)點:b
節(jié)點:c
節(jié)點:d
節(jié)點:e
節(jié)點:f
二叉樹葉子節(jié)點個數(shù)為:3
請按任意鍵繼續(xù). . .

本例創(chuàng)建的二叉樹形狀:
    a
  b    d  
c     e  f
*/

希望本文所述對大家C++程序設計有所幫助。

相關文章

  • VC外部符號錯誤_main,_WinMain@16,__beginthreadex解決方法

    VC外部符號錯誤_main,_WinMain@16,__beginthreadex解決方法

    這篇文章主要介紹了VC外部符號錯誤_main,_WinMain@16,__beginthreadex解決方法,實例分析了比較典型的錯誤及對應的解決方法,需要的朋友可以參考下
    2015-05-05
  • C++實現(xiàn)字符格式相互轉換的示例代碼

    C++實現(xiàn)字符格式相互轉換的示例代碼

    這篇文章主要為大家詳細介紹了C++中實現(xiàn)字符格式相互轉換的方法,主要有UTF8與string互轉、wstring與string互轉,感興趣的小伙伴可以了解一下
    2022-11-11
  • C語言實現(xiàn)將彩色bmp圖像轉化為灰圖、灰度圖像反色

    C語言實現(xiàn)將彩色bmp圖像轉化為灰圖、灰度圖像反色

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)將彩色bmp圖像轉化為灰圖、灰度圖像反色,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 利用C/C++實現(xiàn)較完整貪吃蛇游戲

    利用C/C++實現(xiàn)較完整貪吃蛇游戲

    這篇文章主要為大家詳細介紹了利用C/C++實現(xiàn)較完整貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • C++利用模板實現(xiàn)消息訂閱和分發(fā)功能

    C++利用模板實現(xiàn)消息訂閱和分發(fā)功能

    C++語言支持重載,模板,虛函數(shù)等特性,為編寫高性能可擴展的程序提供了利器。本文就講利用模板實現(xiàn)消息訂閱和分發(fā)功能,感興趣的小伙伴可以了解一下
    2022-12-12
  • C語言實現(xiàn)個人財務管理軟件

    C語言實現(xiàn)個人財務管理軟件

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)個人財務管理軟件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C和C++中argc和argv的含義及用法詳解

    C和C++中argc和argv的含義及用法詳解

    argv 是 argument vector的縮寫,表示傳入main函數(shù)的參數(shù)序列或指針,這篇文章主要介紹了C和C++中argc和argv的含義以及用法,需要的朋友可以參考下
    2022-11-11
  • C++應用Eigen庫對應實現(xiàn)matlab中部分函數(shù)問題

    C++應用Eigen庫對應實現(xiàn)matlab中部分函數(shù)問題

    這篇文章主要介紹了C++應用Eigen庫對應實現(xiàn)matlab中部分函數(shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • C語言解決百錢買百雞問題

    C語言解決百錢買百雞問題

    本文給大家分享的是一個經(jīng)典的算法(百元百雞)的C語言版的解決方法,使用的是比較偷懶的窮舉法,有需要的小伙伴可以參考下。
    2016-02-02
  • C/C++實現(xiàn)精靈游戲的示例代碼

    C/C++實現(xiàn)精靈游戲的示例代碼

    這篇文章主要為大家介紹了如何利用C++實現(xiàn)簡單的精靈游戲,文中的示例代碼講解詳細,有一定的參考價值,感興趣的小伙伴可以了解一下
    2022-06-06

最新評論

白山市| 邳州市| 石渠县| 探索| 万安县| 南宁市| 江城| 远安县| 海口市| 阳高县| 德庆县| 郓城县| 沂源县| 灵川县| 大兴区| 丹江口市| 普安县| 双城市| 汉中市| 禹城市| 东丽区| 乌海市| 台前县| 邯郸县| 山阴县| 安阳县| 台州市| 噶尔县| 皋兰县| 顺义区| 田东县| 竹山县| 上林县| 南陵县| 乐业县| 永济市| 鄂尔多斯市| 荆州市| 泰州市| 平度市| 贵定县|