色www,五月婷婷深爱五月,午夜国产一级片,色噜噜综合,国产大胸无码视频,清纯美女被操黄网站在线观看,波多野结衣av高清一区二区三区

C++如何實(shí)現(xiàn)二叉樹葉子節(jié)點(diǎn)個(gè)數(shù)計(jì)算

時(shí)間:2025-10-15 13:21:49 C語言

C++如何實(shí)現(xiàn)二叉樹葉子節(jié)點(diǎn)個(gè)數(shù)計(jì)算

  很多人都不知道C++如何實(shí)現(xiàn)二叉樹葉子節(jié)點(diǎn)個(gè)數(shù)計(jì)算,下面小編為大家解答一下,希望能幫到大家!

  /*求二叉樹葉子節(jié)點(diǎn)個(gè)數(shù) -- 采用遞歸和非遞歸方法

  經(jīng)調(diào)試可運(yùn)行源碼及分析如下:

  ***/

  #include

  #include

  #include

  using std::cout;

  using std::cin;

  using std::endl;

  using std::stack;

  /*二叉樹結(jié)點(diǎn)定義*/

  typedef struct BTreeNode

  {

  char elem;

  struct BTreeNode *pleft;

  struct BTreeNode *pright;

  }BTreeNode;

  /*

  求二叉樹葉子節(jié)點(diǎn)數(shù)

  葉子節(jié)點(diǎn):即沒有左右子樹的結(jié)點(diǎn)

  遞歸方式步驟:

  如果給定節(jié)點(diǎn)proot為NULL,則是空樹,葉子節(jié)點(diǎn)為0,返回0;

  如果給定節(jié)點(diǎn)proot左右子樹均為NULL,則是葉子節(jié)點(diǎn),且葉子節(jié)點(diǎn)數(shù)為1,返回1;

  如果給定節(jié)點(diǎn)proot左右子樹不都為NULL,則不是葉子節(jié)點(diǎn),以proot為根節(jié)點(diǎn)的子樹葉子節(jié)點(diǎn)數(shù)=proot左子樹葉子節(jié)點(diǎn)數(shù)+proot右子樹葉子節(jié)點(diǎn)數(shù)。

  /*遞歸實(shí)現(xiàn)求葉子節(jié)點(diǎn)個(gè)數(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));

  }

  /*非遞歸:本例采用先序遍歷計(jì)算

  判斷當(dāng)前訪問的節(jié)點(diǎn)是不是葉子節(jié)點(diǎn),然后對(duì)葉子節(jié)點(diǎn)求和即可。

  **/

  int preorder_get_leaf_number(BTreeNode* proot)

  {

  if(proot == NULL)

  return 0;

  int num = 0;

  stackst;

  while (proot != NULL || !st.empty())

  {

  while (proot != NULL)

  {

   cout << "節(jié)點(diǎn):" << 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é)點(diǎn)*/

  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);/pic/p>

  pre_crt_tree(bt);/pic/p>

  tree_leaf_number = get_leaf_number(bt);/pic/p>

  cout << "二叉樹葉子節(jié)點(diǎn)個(gè)數(shù)為:" << tree_leaf_number << endl;

  cout << "非遞歸先序遍歷過程如下:" << endl;

  tree_leaf_number = preorder_get_leaf_number(bt);/pic/p>

  cout << "二叉樹葉子節(jié)點(diǎn)個(gè)數(shù)為:" << tree_leaf_number << endl;

  system("pause");

  return 0;

  }

  /*

  運(yùn)行結(jié)果:

  a b c # # # d e # # f # #

  ---以上為輸入---

  ---以下為輸出---

  二叉樹葉子節(jié)點(diǎn)個(gè)數(shù)為:3

  非遞歸遍歷過程如下:

  節(jié)點(diǎn):a

  節(jié)點(diǎn):b

  節(jié)點(diǎn):c

  節(jié)點(diǎn):d

  節(jié)點(diǎn):e

  節(jié)點(diǎn):f

  二叉樹葉子節(jié)點(diǎn)個(gè)數(shù)為:3

  請(qǐng)按任意鍵繼續(xù). . .

  本例創(chuàng)建的二叉樹形狀:

  a

  b d

  c  e f

  */

【C++如何實(shí)現(xiàn)二叉樹葉子節(jié)點(diǎn)個(gè)數(shù)計(jì)算】相關(guān)文章:

php如何實(shí)現(xiàn)的二叉樹遍歷(示例)02-07

C++二叉樹的鏡像實(shí)例12-13

C++ 實(shí)現(xiàn)2048游戲范例12-18

c++利用windows函數(shù)實(shí)現(xiàn)計(jì)時(shí)范例11-02

C++實(shí)現(xiàn)一維向量旋轉(zhuǎn)算法09-07

如何運(yùn)行C++程序11-08

如何實(shí)現(xiàn)Excel計(jì)算錯(cuò)誤,系統(tǒng)就提示錯(cuò)誤11-02

C語言中實(shí)現(xiàn)參數(shù)個(gè)數(shù)可變函數(shù)01-16

C++如何調(diào)用matlab函數(shù)10-12