<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. C++如何實現二叉樹葉子節點個數計算

    時間:2025-10-15 13:21:49 C語言

    C++如何實現二叉樹葉子節點個數計算

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

      /*求二叉樹葉子節點個數 -- 采用遞歸和非遞歸方法

      經調試可運行源碼及分析如下:

      ***/

      #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;

      /*

      求二叉樹葉子節點數

      葉子節點:即沒有左右子樹的結點

      遞歸方式步驟:

      如果給定節點proot為NULL,則是空樹,葉子節點為0,返回0;

      如果給定節點proot左右子樹均為NULL,則是葉子節點,且葉子節點數為1,返回1;

      如果給定節點proot左右子樹不都為NULL,則不是葉子節點,以proot為根節點的子樹葉子節點數=proot左子樹葉子節點數+proot右子樹葉子節點數。

      /*遞歸實現求葉子節點個數*/

      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));

      }

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

      判斷當前訪問的節點是不是葉子節點,然后對葉子節點求和即可。

      **/

      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 << "節點:" << 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;

      }

      /*初始化二叉樹根節點*/

      BTreeNode* btree_init(BTreeNode* &bt)

      {

      bt = NULL;

      return bt;

      }

      /*先序創建二叉樹*/

      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 << "二叉樹葉子節點個數為:" << tree_leaf_number << endl;

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

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

      cout << "二叉樹葉子節點個數為:" << tree_leaf_number << endl;

      system("pause");

      return 0;

      }

      /*

      運行結果:

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

      ---以上為輸入---

      ---以下為輸出---

      二叉樹葉子節點個數為:3

      非遞歸遍歷過程如下:

      節點:a

      節點:b

      節點:c

      節點:d

      節點:e

      節點:f

      二叉樹葉子節點個數為:3

      請按任意鍵繼續. . .

      本例創建的二叉樹形狀:

      a

      b d

      c  e f

      */

    【C++如何實現二叉樹葉子節點個數計算】相關文章:

    php如何實現的二叉樹遍歷(示例)02-07

    C++二叉樹的鏡像實例12-13

    C++ 實現2048游戲范例12-18

    c++利用windows函數實現計時范例11-02

    C++實現一維向量旋轉算法09-07

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

    如何實現Excel計算錯誤,系統就提示錯誤11-02

    C語言中實現參數個數可變函數01-16

    C++如何調用matlab函數10-12

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人