全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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 ;
}
/*
非递归方式步骤如下:
借助队列
首先,将根节点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++程序设计有所帮助。


# C++  # 递归  # 非递归  # 算法  # 二叉树  # 镜像  # C++ 非递归实现二叉树的前中后序遍历  # C++ 数据结构二叉树(前序/中序/后序递归、非递归遍历)  # C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法  # C++基于递归和非递归算法判定两个二叉树结构是否完全相同(结构和数据都相同)  # C++非递归队列实现二叉树的广度优先遍历  # C++非递归建立二叉树实例  # C++二叉树的前序中序后序非递归实现方法详细讲解  # 遍历  # 子树  # 第二步  # 给大家  # 不为  # 请按  # 则为  # 所述  # 程序设计  # 上为  # 本例  # 下一层  # 讲述了  # std  # cout  # queue  # gt 


相关文章: 建站主机如何选?高性价比方案全解析  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  如何在Windows服务器上快速搭建网站?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  如何通过cPanel快速搭建网站?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  成都网站制作报价公司,成都工业用气开户费用?  如何用VPS主机快速搭建个人网站?  东莞专业制作网站的公司,东莞大学生网的网址是什么?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  如何通过虚拟主机快速搭建个人网站?  如何快速重置建站主机并恢复默认配置?  如何通过西部建站助手安装IIS服务器?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  ,巨量百应是干嘛的?  如何打造高效商业网站?建站目的决定转化率  建站168自助建站系统:快速模板定制与SEO优化指南  宝塔面板创建网站无法访问?如何快速排查修复?  建站之星2.7模板:企业网站建设与h5定制设计专题  如何自定义建站之星网站的导航菜单样式?  如何在景安服务器上快速搭建个人网站?  内网网站制作软件,内网的网站如何发布到外网?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  中山网站推广排名,中山信息港登录入口?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  网站制作壁纸教程视频,电脑壁纸网站?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  公司门户网站制作流程,华为官网怎么做?  ,购物网站怎么盈利呢?  教学论文网站制作软件有哪些,写论文用什么软件 ?  建站之星展会模板:智能建站与自助搭建高效解决方案  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  网站制作话术技巧,网站推广做的好怎么话术?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  建站ABC备案流程中有哪些关键注意事项?  宁波免费建站如何选择可靠模板与平台?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  建站之星logo尺寸如何设置最合适?  建站之星伪静态规则如何正确配置?  建站之星如何保障用户数据免受黑客入侵?  c++ stringstream用法详解_c++字符串与数字转换利器  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  北京专业网站制作设计师招聘,北京白云观官方网站?  ,如何利用word制作宣传手册?  制作网站的模板软件,网站怎么建设?  如何做静态网页,sublimetext3.0制作静态网页?  建站之星2.7模板快速切换与批量管理功能操作指南  如何在建站主机中优化服务器配置?  如何通过IIS搭建网站并配置访问权限? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。