亚洲一级免费看,特黄特色大片免费观看播放器,777毛片,久久久久国产一区二区三区四区,欧美三级一区二区,国产精品一区二区久久久久,人人澡人人草

C語言

C++如何實現(xiàn)二叉樹葉子節(jié)點個數(shù)計算

時間:2025-05-05 18:38:02 C語言 我要投稿
  • 相關推薦

C++如何實現(xiàn)二叉樹葉子節(jié)點個數(shù)計算

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

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

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

  ***/

  #include

  #include

  #include

  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;

  stackst;

  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++如何實現(xiàn)二叉樹葉子節(jié)點個數(shù)計算】相關文章:

php如何實現(xiàn)的二叉樹遍歷(示例)10-17

C++二叉樹的鏡像實例09-02

C++ 實現(xiàn)2048游戲范例09-17

C++實現(xiàn)一維向量旋轉算法07-31

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

如何運行C++程序08-28

C語言中實現(xiàn)參數(shù)個數(shù)可變函數(shù)11-12

如何實現(xiàn)Excel計算錯誤,系統(tǒng)就提示錯誤10-15

如何實現(xiàn)硬盤對拷06-30