亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

C語言

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

時間:2024-09-16 16:43:00 C語言 我要投稿
  • 相關(guān)推薦

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;

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

  typedef struct BTreeNode

  {

  char elem;

  struct BTreeNode *pleft;

  struct BTreeNode *pright;

  }BTreeNode;

  /*

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

  葉子節(jié)點:即沒有左右子樹的結(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));

  }

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

  判斷當(dāng)前訪問的節(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;

  }

  /*

  運行結(jié)果:

  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ù)計算】相關(guān)文章:

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

C++實現(xiàn)自底向上的歸并排序算法09-09

c和c++中實現(xiàn)函數(shù)回調(diào)的方法08-30

C語言中計算二叉樹寬度的方式06-12

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

WPS表格怎么計算多個數(shù)的乘積08-01

如何實現(xiàn)CSS右對齊10-29

PHP中多態(tài)如何實現(xiàn)09-04

如何實現(xiàn)表格窗口的固定10-04

計算機二級C++模板概述07-06