欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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入隊;
第一步:當(dāng)隊列非空時,獲取當(dāng)前層次的節(jié)點總數(shù),即當(dāng)前隊列的長度;執(zhí)行第二步;
第二步:按照當(dāng)前層的節(jié)點總數(shù),出隊進行遍歷節(jié)點,在遍歷時,
    交換左右節(jié)點,如果左右節(jié)點存在,則入隊;
    當(dāng)遍歷完當(dāng)前層所有節(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語言中定義與聲明有哪些區(qū)別

    C語言中定義與聲明有哪些區(qū)別

    在C/C++中有一個基礎(chǔ)且重要的知識,什么是聲明?什么是定義?他們的區(qū)別是什么?本文將帶你理清其中的區(qū)別
    2022-07-07
  • 關(guān)于C++虛函數(shù)與靜態(tài)、動態(tài)綁定的問題

    關(guān)于C++虛函數(shù)與靜態(tài)、動態(tài)綁定的問題

    這篇文章主要介紹了C++虛函數(shù)與靜態(tài)、動態(tài)綁定,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • c語言printf函數(shù)的使用詳解

    c語言printf函數(shù)的使用詳解

    本篇文章是對c語言中printf函數(shù)的使用進行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言之地址傳遞和引用傳遞的問題

    C語言之地址傳遞和引用傳遞的問題

    這篇文章主要介紹了C語言之地址傳遞和引用傳遞的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 使用設(shè)計模式中的單例模式來實現(xiàn)C++的boost庫

    使用設(shè)計模式中的單例模式來實現(xiàn)C++的boost庫

    這篇文章主要介紹了使用設(shè)計模式中的單例模式來實現(xiàn)C++的boost庫的方法,其中作者對線程安全格外強調(diào),需要的朋友可以參考下
    2016-03-03
  • C++求最大公約數(shù)四種方法解析

    C++求最大公約數(shù)四種方法解析

    這篇文章主要為大家詳細(xì)介紹了C++求最大公約數(shù)四種方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • C語言用棧和隊列實現(xiàn)的回文檢測功能示例

    C語言用棧和隊列實現(xiàn)的回文檢測功能示例

    這篇文章主要介紹了C語言用棧和隊列實現(xiàn)的回文檢測功能,結(jié)合具體實例形式分析了C語言棧和隊列的定義及使用棧和隊列進行回文檢測的操作技巧,需要的朋友可以參考下
    2017-06-06
  • 用C語言編寫推箱子游戲

    用C語言編寫推箱子游戲

    這篇文章主要為大家詳細(xì)介紹了用C語言編寫推箱子游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C語言動態(tài)內(nèi)存管理的實現(xiàn)

    C語言動態(tài)內(nèi)存管理的實現(xiàn)

    本文主要介紹了C語言動態(tài)內(nèi)存管理的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C++缺省參數(shù)的具體使用

    C++缺省參數(shù)的具體使用

    缺省參數(shù)是聲明或定義函數(shù)時為函數(shù)的參數(shù)指定一個默認(rèn)值。本文就詳細(xì)的介紹了一下C++缺省參數(shù)的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2022-01-01

最新評論