奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

C語言

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

時間:2025-05-05 18:38:02 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);//初始化根節點

  pre_crt_tree(bt);//創建二叉樹

  tree_leaf_number = get_leaf_number(bt);//遞歸

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

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

  tree_leaf_number = preorder_get_leaf_number(bt);//非遞歸

  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如何實現的二叉樹遍歷(示例)10-17

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

C++ 實現2048游戲范例09-17

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

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

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

C語言中實現參數個數可變函數11-12

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

如何實現硬盤對拷06-30

主站蜘蛛池模板: 嘉鱼县| 东光县| 奇台县| 博爱县| 静安区| 米脂县| 察哈| 读书| 开封市| 安庆市| 临清市| 巧家县| 商都县| 广水市| 郑州市| 汉中市| 东海县| 阿克苏市| 岳池县| 无锡市| 秦安县| 四子王旗| 伊川县| 吴忠市| 泽库县| 仁怀市| 石嘴山市| 揭西县| 翁源县| 梁平县| 赣榆县| 蓬莱市| 邓州市| 罗城| 阜城县| 明水县| 扬中市| 博野县| 和林格尔县| 舟山市| 富民县|