最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++基于遞歸和非遞歸算法求二叉樹鏡像的方法

 更新時間:2017年05月11日 14:30:51   作者:難免有錯_  
這篇文章主要介紹了C++基于遞歸和非遞歸算法求二叉樹鏡像的方法,針對二叉樹遍歷結(jié)合實例形式分析了遞歸與非遞歸算法的實現(xiàn)與使用技巧,需要的朋友可以參考下

本文實例講述了C++基于遞歸和非遞歸算法求二叉樹鏡像的方法。分享給大家供大家參考,具體如下:

/*求二叉樹鏡像 -- 采用遞歸和非遞歸方法
經(jīng)調(diào)試可運行源碼及分析如下:
***/
#include <stdlib.h>
#include <iostream>
#include <queue>
using std::cout;
using std::cin;
using std::endl;
using std::queue;
/*二叉樹結(jié)點定義*/
typedef struct BTreeNode
{
  char elem;
  struct BTreeNode *pleft;
  struct BTreeNode *pright;
}BTreeNode;
/*
求二叉樹鏡像
遞歸方式步驟:
如果proot為NULL,則為空樹,返回;
如果proot不為NULL,交換proot左右結(jié)點,然后分別求左右子樹的鏡像;
*/
/*遞歸求二叉樹鏡像*/
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 ;
}
/*
非遞歸方式步驟如下:
借助隊列
首先,將根節(jié)點proot入隊;
第一步:當隊列非空時,獲取當前層次的節(jié)點總數(shù),即當前隊列的長度;執(zhí)行第二步;
第二步:按照當前層的節(jié)點總數(shù),出隊進行遍歷節(jié)點,在遍歷時,
    交換左右節(jié)點,如果左右節(jié)點存在,則入隊;
    當遍歷完當前層所有節(jié)點時,遍歷下一層,執(zhí)行第一步。
*/
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();
      //交換左右子節(jié)點
      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 ;
}
/*初始化二叉樹根節(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);
  }
}
/*先序遍歷*/
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);//初始化根節(jié)點
  pre_crt_tree(bt);//創(chuàng)建二叉樹
  cout << "先序遍歷輸出如下:" << endl;
  cout << "調(diào)用鏡像函數(shù)前:" << endl;
  pre_order_traverse(bt);
  cout << endl;
  get_bitree_mirror(bt);
  cout << "遞歸調(diào)用鏡像函數(shù)后:" << endl;
  pre_order_traverse(bt);
  cout << endl;
  cout << "非遞歸調(diào)用鏡像函數(shù)后:" << endl;
  get_bitree_mirror_leveltraverse(bt);
  pre_order_traverse(bt);
  cout << endl;
  system("pause");
  return 0;
}

/*
運行結(jié)果:
a b c # # # d e # # #
------以上為輸入-----------
------以下為輸出-----------
先序遍歷輸出如下:
調(diào)用鏡像函數(shù)前:
a b c d e
遞歸調(diào)用鏡像函數(shù)后:
a d e b c
非遞歸調(diào)用鏡像函數(shù)后:
a b c d e
請按任意鍵繼續(xù). . .
---------------------------------
本例創(chuàng)建的二叉樹形狀:
    a
  b    d
c     e
調(diào)用遞歸求二叉樹鏡像形狀:
   a
d    b
  e    c
再次調(diào)用非遞歸求二叉樹鏡像形狀(即鏡像的鏡像):
    a
  b    d
c     e
*/

希望本文所述對大家C++程序設(shè)計有所幫助。

相關(guān)文章

  • C語言簡單實現(xiàn)掃雷小游戲

    C語言簡單實現(xiàn)掃雷小游戲

    這篇文章主要為大家詳細介紹了C語言簡單實現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 一篇文章詳細解釋C++的友元(friend)

    一篇文章詳細解釋C++的友元(friend)

    這篇文章主要為大家詳細介紹了C++的友元(friend),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C語言:代碼宏詳解

    C語言:代碼宏詳解

    這篇文章主要介紹了 C語言宏定義使用實例詳解的相關(guān)資料,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • Qt實現(xiàn)FTP的上傳和下載的實例代碼

    Qt實現(xiàn)FTP的上傳和下載的實例代碼

    本篇文章主要介紹了Qt實現(xiàn)FTP的上傳和下載的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • OpenGL實現(xiàn)中點劃線法

    OpenGL實現(xiàn)中點劃線法

    這篇文章主要為大家詳細介紹了OpenGL實現(xiàn)中點劃線法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C++字符串的截取問題

    C++字符串的截取問題

    這篇文章主要介紹了C++字符串的截取問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • boost.asio框架系列之socket編程

    boost.asio框架系列之socket編程

    這篇文章介紹了boost.asio框架系列之socket編程,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Mygui中文換行問題解決方案

    Mygui中文換行問題解決方案

    相信大家解決了中文輸入后一定會遇到如何解決中文輸入的問題,中文輸入換行問題是很多gui框架都存在的一個問題,需要的朋友可以了解下
    2012-11-11
  • C++入門之模板基礎(chǔ)講解

    C++入門之模板基礎(chǔ)講解

    這篇文章主要為大家介紹了C++入門之模板基礎(chǔ),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • 使用UDP協(xié)議實現(xiàn)單詞翻譯服務(wù)器

    使用UDP協(xié)議實現(xiàn)單詞翻譯服務(wù)器

    這篇文章主要為大家詳細介紹了如何使用UDP協(xié)議實現(xiàn)英文單詞翻譯服務(wù)器,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解下
    2023-08-08

最新評論

扎鲁特旗| 铜川市| 封开县| 喀喇| 策勒县| 习水县| 绵竹市| 翁源县| 白山市| 临沂市| 邳州市| 理塘县| 彝良县| 泽库县| 琼结县| 灵武市| 佛冈县| 泸西县| 清镇市| 斗六市| 丽江市| 昆明市| 明溪县| 和顺县| 屏东县| 洪湖市| 安阳县| 滁州市| 义乌市| 漳州市| 昔阳县| 宁海县| 清涧县| 贵德县| 平阳县| 星座| 佛冈县| 武平县| 鄂尔多斯市| 巴塘县| 阿合奇县|