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

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

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

本文實例講述了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 ;
}
/*
非遞歸方式步驟如下:
借助隊列
首先,將根節(jié)點proot入隊;
第一步:當隊列非空時,獲取當前層次的節(jié)點總數,即當前隊列的長度;執(zhí)行第二步;
第二步:按照當前層的節(jié)點總數,出隊進行遍歷節(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 << "調用鏡像函數前:" << 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
請按任意鍵繼續(xù). . .
---------------------------------
本例創(chuàng)建的二叉樹形狀:
    a
  b    d
c     e
調用遞歸求二叉樹鏡像形狀:
   a
d    b
  e    c
再次調用非遞歸求二叉樹鏡像形狀(即鏡像的鏡像):
    a
  b    d
c     e
*/

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

相關文章

  • C語言簡單實現掃雷小游戲

    C語言簡單實現掃雷小游戲

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

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

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

    C語言:代碼宏詳解

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

    Qt實現FTP的上傳和下載的實例代碼

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

    OpenGL實現中點劃線法

    這篇文章主要為大家詳細介紹了OpenGL實現中點劃線法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    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++入門之模板基礎講解

    C++入門之模板基礎講解

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

    使用UDP協議實現單詞翻譯服務器

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

最新評論

芒康县| 武威市| 巧家县| 镇雄县| 宜丰县| 南城县| 寿光市| 阳城县| 惠安县| 武乡县| 社会| 常宁市| 法库县| 龙泉市| 习水县| 陆良县| 中阳县| 祁连县| 德州市| 抚远县| 沙河市| 富川| 吴川市| 廊坊市| 共和县| 沅陵县| 嵩明县| 平和县| 交口县| 北票市| 清苑县| 营口市| 乌兰浩特市| 荥经县| 曲麻莱县| 登封市| 温泉县| SHOW| 齐河县| 长岭县| 汽车|