亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中基于遞歸和非遞歸算法如何求二叉樹鏡像

發布時間:2021-08-09 09:35:21 來源:億速云 閱讀:167 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關C++中基于遞歸和非遞歸算法如何求二叉樹鏡像,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

具體如下:

/*求二叉樹鏡像 -- 采用遞歸和非遞歸方法
經調試可運行源碼及分析如下:
***/
#include <stdlib.h>
#include <iostream>
#include <queue>
using std::cout;
using std::cin;
using std::endl;
using std::queue;
/*二叉樹結點定義*/
typedef struct BTreeNode
{
  char elem;
  struct BTreeNode *pleft;
  struct BTreeNode *pright;
}BTreeNode;
/*
求二叉樹鏡像
遞歸方式步驟:
如果proot為NULL,則為空樹,返回;
如果proot不為NULL,交換proot左右結點,然后分別求左右子樹的鏡像;
*/
/*遞歸求二叉樹鏡像*/
void get_bitree_mirror(BTreeNode* proot)
{
  if (proot == NULL)
    return ;
  BTreeNode* temp_node = proot->pleft;
  proot->pleft = proot->pright;
  proot->pright = temp_node;
  get_bitree_mirror(proot->pleft);
  get_bitree_mirror(proot->pright);
  return ;
}
/*
非遞歸方式步驟如下:
借助隊列
首先,將根節點proot入隊;
第一步:當隊列非空時,獲取當前層次的節點總數,即當前隊列的長度;執行第二步;
第二步:按照當前層的節點總數,出隊進行遍歷節點,在遍歷時,
    交換左右節點,如果左右節點存在,則入隊;
    當遍歷完當前層所有節點時,遍歷下一層,執行第一步。
*/
void get_bitree_mirror_leveltraverse(BTreeNode* proot)
{
  if(proot == NULL)
    return ;
  queue <BTreeNode*> que;
  que.push(proot);
  int level_nodes_number = 0;
  while (!que.empty())//層次遍歷
  {
    level_nodes_number = que.size();
    int level_count = 0;
    while (level_count < level_nodes_number)
    {
      ++level_count;
      proot = que.front();
      que.pop();
      //交換左右子節點
      BTreeNode* temp_node = proot->pleft;
      proot->pleft = proot->pright;
      proot->pright = temp_node;
      if(proot->pleft != NULL)
        que.push(proot->pleft);
      if(proot->pright != NULL)
        que.push(proot->pright);
    }
  }
  return ;
}
/*初始化二叉樹根節點*/
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);
  }
}
/*先序遍歷*/
void pre_order_traverse(BTreeNode* proot)
{
  if(proot == NULL)
    return;
  cout<< proot->elem << " ";
  pre_order_traverse(proot->pleft);
  pre_order_traverse(proot->pright);
  return;
}
int main()
{
  int tree_node_number = 0;
  BTreeNode *bt;
  btree_init(bt);//初始化根節點
  pre_crt_tree(bt);//創建二叉樹
  cout << "先序遍歷輸出如下:" << endl;
  cout << "調用鏡像函數前:" << endl;
  pre_order_traverse(bt);
  cout << endl;
  get_bitree_mirror(bt);
  cout << "遞歸調用鏡像函數后:" << endl;
  pre_order_traverse(bt);
  cout << endl;
  cout << "非遞歸調用鏡像函數后:" << endl;
  get_bitree_mirror_leveltraverse(bt);
  pre_order_traverse(bt);
  cout << endl;
  system("pause");
  return 0;
}
/*
運行結果:
a b c # # # d e # # #
------以上為輸入-----------
------以下為輸出-----------
先序遍歷輸出如下:
調用鏡像函數前:
a b c d e
遞歸調用鏡像函數后:
a d e b c
非遞歸調用鏡像函數后:
a b c d e
請按任意鍵繼續. . .
---------------------------------
本例創建的二叉樹形狀:
    a
  b    d
c     e
調用遞歸求二叉樹鏡像形狀:
   a
d    b
  e    c
再次調用非遞歸求二叉樹鏡像形狀(即鏡像的鏡像):
    a
  b    d
c     e
*/

關于“C++中基于遞歸和非遞歸算法如何求二叉樹鏡像”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

巴东县| 区。| 页游| 张北县| 宁陵县| 长泰县| 滨州市| 博爱县| 陈巴尔虎旗| 渑池县| 稷山县| 中方县| 容城县| 大悟县| 布拖县| 崇阳县| 阿坝县| 萨迦县| 清原| 乌拉特后旗| 三门峡市| 石棉县| 瓮安县| 米泉市| 两当县| 青海省| 玛沁县| 邢台县| 从江县| 上高县| 瓦房店市| 高雄县| 高陵县| 旬邑县| 邹城市| 哈巴河县| 开江县| 黄骅市| 镇巴县| 沛县| 宜川县|