操作给定的二叉树,将其变换为源二叉树的镜像。

递归思想。

代码:

#include<iostream>
#include <vector>
#include <queue>using namespace std;struct  TreeNode {int val;struct  TreeNode    *left;struct  TreeNode    *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}
};void Mirror(TreeNode *pRoot)   //核心代码
{if(pRoot==NULL)    //空树return;if(pRoot->left==NULL&&pRoot->right==NULL)   //只有一个结点的二叉树return;TreeNode* pTemp=pRoot->left;   //创建一个临时结点指针,用于交换左右子节点pRoot->left=pRoot->right;pRoot->right=pTemp;                  //交换根节点的左右结点if(pRoot->left!=NULL)Mirror(pRoot->left);if(pRoot->right!=NULL)Mirror(pRoot->right);}class BinTree
{
public:TreeNode *root;TreeNode* CreateTree();void preOrder(TreeNode *r);//递归实现先序遍历void InOrder(TreeNode *r);//递归实现中序遍历void PostOrder(TreeNode *r);//递归实现后续遍历
};
TreeNode* BinTree::CreateTree()//创建一棵二叉树
{TreeNode *p1=new TreeNode(1);TreeNode *p2=new TreeNode(2);TreeNode *p3=new TreeNode(3);TreeNode *p4=new TreeNode(4);TreeNode *p5=new TreeNode(5);TreeNode *p6=new TreeNode(6);TreeNode *p7=new TreeNode(7);TreeNode *p8=new TreeNode(8);TreeNode *p9=new TreeNode(9);p1->left=p2;p1->right=p3;p2->left=p4;p2->right=p5;p5->left=p6;p3->left=p7;p3->right=p8;p8->right=p9;root=p1;return root;
}void Print(vector<int> &myarray)
{int num=myarray.size();for(int i=0; i<num;i++)cout<<myarray[i]<<"  ";cout<<endl;return;
}
vector<int> PrintFromTopToBottom(TreeNode* root)
{vector<int> res;if(root==NULL)return res;queue<TreeNode*> q;q.push(root);while(!q.empty()){res.push_back(q.front()->val);if(q.front()->left!=NULL)q.push(q.front()->left);if(q.front()->right!=NULL)q.push(q.front()->right);q.pop();}return res;
}int main()
{BinTree t;TreeNode* root=t.CreateTree();//创建二叉树vector<int>vec= PrintFromTopToBottom( root );Print(vec);Mirror(root);vector<int>vec2= PrintFromTopToBottom( root );Print(vec2);return 0;
}

《剑指offer》面试题19——二叉树的镜像(C++)相关推荐

  1. 剑指offer面试题[19]-二叉树的镜像

    题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8/ \6 10/ \ / \5 7 9 11镜像二叉树8/ \10 6/ \ / \11 9 7 5 ...

  2. 剑指offer面试题27. 二叉树的镜像(递归)

    题目描述 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 思路 详见链接 代码 class Solution:def mirrorTree(self, root:TreeNode)->Tr ...

  3. 【递归】剑指offer——面试题19:二叉树的镜像

    剑指offer--面试题19:二叉树的镜像 Solution1: 递归解法,牢记! 根结点为空的情况容易漏,注意! /* struct TreeNode {int val;struct TreeNod ...

  4. [剑指offer]面试题19:二叉树的镜像

    面试题19:二叉树的镜像 题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像. 二叉树结点的定义如下: struct BinaryTreeNode {int value;BinaryTreeNo ...

  5. 剑指offer:对称的二叉树(镜像,递归,非递归DFS栈+BFS队列)

    1. 题目描述 /**请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的 */ 2. 递归 思路: /**1.只要pRoot.left和pRo ...

  6. 【剑指offer-Java版】19二叉树的镜像

    二叉树的镜像: public class _Q19 {public void MirrorRecursively(BinaryTreeNode tree){if(tree == null) retur ...

  7. 剑指offer(C++)-JZ27:二叉树的镜像(数据结构-树)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 操作给定的二叉树,将其变换为源二叉树的镜像. 数据范围:二叉树的节点数 0≤n≤10 ...

  8. 剑指offer十八之二叉树的镜像

    一.题目 操作给定的二叉树,将其变换为源二叉树的镜像.二叉树的镜像定义: 源二叉树 : 8/ \6 10/ \ / \5 7 9 11镜像二叉树:8/ \10 6/ \ / \11 9 7 5 二.思 ...

  9. 剑指offer面试题[58]-二叉树的下一个结点

    题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. /* struct TreeLinkNode {int ...

  10. 剑指offer面试题34. 二叉树中和为某一值的路径(先序遍历)(回溯)

    题目描述 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点所经过的节点形成一条路径. 思路 详见链接 代码 class Solution:def ...

最新文章

  1. 行人被遮挡问题怎么破?百度提出PGFA新方法,发布Occluded-DukeMTMC大型数据集 | ICCV 2019...
  2. HTML5column属性布局页脚,利用column多列属性调整页面文字列布局
  3. python3用什么系统好_学python用什么系统【怎么学好python】
  4. 2016年工作中遇到的问题31-40
  5. STM32 电机教程 17 - 基于ST MotorControl Workbench的电机调试
  6. python ui自动化测试框架_基于python语言下的UI自动化测试框架搭建(一)
  7. java 可视化_可视化Java 9模块关系
  8. 少儿编程100讲轻松学python(四)-python如何判断是否为数字字符串
  9. A Simple Note on P4FPGA: A Rapid Prototyping Framework for P4
  10. 阿里巴巴大数据实践—实时技术
  11. python open函数参数newline_Python open() 函数
  12. testufo测试刷新率测试_上手体验微星电竞显示器PAG301CR:200Hz高刷新率只是它的小亮点...
  13. 详细的Windows下安装 binwalk
  14. 2020年Airbnb爱彼迎中国房东社区报告
  15. HTML table 和 div
  16. 用Java来写常见的排序算法
  17. 新一代多媒体技术与应用的部分课后题
  18. 1分钟教你破解风行电视禁止安装应用!
  19. 每天二十分钟学习python_每天 3 分钟,小闫带你学 Python(二十三)
  20. css3ps插件,CSS3Ps(PS图层转换插件) V1.0 官方版

热门文章

  1. mysql主从复制1064_mysql主从复制或其他操作报错ERROR 1064 (42000): You have an er
  2. 中文字符频率统计python_使用 Python 统计中文字符的数量
  3. 切片与MapTask并行度决定机制
  4. python调用msf_使用python操纵metasploit简单小记
  5. VScode:创建用户代码片段
  6. Java:项目启动报错java: -source 1.5 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符)
  7. Javascript特效:照片墙
  8. 【一天一个C++小知识】014:C++中string与char*的区别
  9. 深度学习实现工业零件的缺陷检测
  10. 招聘|月薪20-40K|上海莱陆科技招高级机器人、​Android研发工程师