C++ 二叉树的镜像实例详解

发布时间 - 2026-01-11 01:44:56    点击率:

二叉树的镜像:将一个二叉树的左右子树,调换位置。即下图的形式:

递归的思想是:

从根节点的左右子树进行交换,然后以根节点的左子树为根节点,而后以根节点的右结点为根节点,进行左右子树交换。遇到空节点或叶节点直接返回。下面求二叉树镜像的函数代码实现:

template<class T> 
void MirroTree(TreeNode<T> * root) 
{ 
  if (root == NULL) 
    return; 
  if (root->_left == NULL && root->_right == NULL) 
    return; 
  else 
  { 
    TreeNode<T>* temp = root->_left; 
    root->_left = root->_right; 
    root->_right = temp; 
  } 
  MirroTree(root->_left); 
  MirroTree(root->_right); 
} 

非递归实现思想:

利用stack栈的FILO,即先进后出原则,将根节点先行压入栈中,然后进入栈同时取栈顶结点并pop栈,然后交换左右子树的结点,若根节点的左右子树不为空,即压入栈中,直到栈为空则停止。

下面是非递归实现代码:

template<class T> 
void MirroTree_NoR(TreeNode<T>* root) 
{ 
  stack<TreeNode<T>*> s; 
  s.push(root); 
  while (s.size()) 
  { 
    TreeNode<T>* Top = s.top(); 
    if (Top->_left != NULL || Top->_right != NULL) 
    { 
      TreeNode<T>* temp = Top->_left; 
      Top->_left = Top->_right; 
      Top->_right = temp; 
    } 
    if (Top->_left != NULL) 
      s.push(Top->_left); 
    if (Top->_right != NULL) 
      s.push(Top->_right); 
  } 
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# C++  # 二叉树的镜像  # 二叉树  # C++实现二叉树基本操作详解  # C++二叉树实现词频分析功能  # C++ 数据结构二叉树(前序/中序/后序递归、非递归遍历)  # C++ 数据结构完全二叉树的判断  # C++ 遍历二叉树实例详解  # c++先序二叉树的构建详解  # 子树  # 递归  # 镜像  # 为空  # 希望能  # 谢谢大家  # MirroTree  # void  # gt  # root  # NULL  # TreeNode  # lt  # class  # pre  # strong  # template  # cpp  # brush 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何升级到最新版本?(升级指南和步骤)  微信小程序 scroll-view组件实现列表页实例代码  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  如何做网站制作流程,*游戏网站怎么搭建?  Laravel Fortify是什么,和Jetstream有什么关系  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  如何快速生成凡客建站的专业级图册?  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  EditPlus中的正则表达式 实战(4)  html5的keygen标签为什么废弃_替代方案说明【解答】  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  Java解压缩zip - 解压缩多个文件或文件夹实例  Laravel如何实现本地化和多语言支持?(i18n教程)  如何为不同团队 ID 动态生成多个非值班状态按钮  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  如何在万网利用已有域名快速建站?  Laravel怎么清理缓存_Laravel optimize clear命令详解  WEB开发之注册页面验证码倒计时代码的实现  郑州企业网站制作公司,郑州招聘网站有哪些?  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  如何快速生成可下载的建站源码工具?  在线教育网站制作平台,山西立德教育官网?  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  python中快速进行多个字符替换的方法小结  原生JS获取元素集合的子元素宽度实例  音响网站制作视频教程,隆霸音响官方网站?  如何续费美橙建站之星域名及服务?  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  Laravel如何配置和使用缓存?(Redis代码示例)  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  公司网站制作价格怎么算,公司办个官网需要多少钱?  如何选择PHP开源工具快速搭建网站?  Laravel如何与Inertia.js和Vue/React构建现代单页应用  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  SQL查询语句优化的实用方法总结  如何快速查询网站的真实建站时间?  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  Python文件异常处理策略_健壮性说明【指导】  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  html如何与html链接_实现多个HTML页面互相链接【互相】  桂林网站制作公司有哪些,桂林马拉松怎么报名?  如何在万网主机上快速搭建网站?  如何确认建站备案号应放置的具体位置?