二叉树的镜像 C++
2016-07-28 14:00
387 查看
【题目】
操作给定的二叉树,将其变换为源二叉树的镜像。
【题目分析】
对数的操作,一般涉及到递归和非递归两种思路。
递归思路:
对于树根,不变,交换左右两个子树,然后在对左右子树作为树根进行递归交换他们的子树。注意处理子树为空的情况。
非递归:
非递归采用层次遍历的思想。
【代码】
非递归
递归:
操作给定的二叉树,将其变换为源二叉树的镜像。
【题目分析】
对数的操作,一般涉及到递归和非递归两种思路。
递归思路:
对于树根,不变,交换左右两个子树,然后在对左右子树作为树根进行递归交换他们的子树。注意处理子树为空的情况。
非递归:
非递归采用层次遍历的思想。
【代码】
非递归
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: void Mirror(TreeNode *pRoot) { if(pRoot==NULL)return ; stack<TreeNode *> st; st.push(pRoot); while(!st.empty()) { TreeNode *tmp=st.top(); st.pop();//注意stcak的pop()方法没有返回值。所以需要先用tmp指针记录要处理的“树根” TreeNode *tmp1=NULL; if(tmp->left||tmp->right) { tmp1=tmp->left; tmp->left=tmp->right; tmp->right=tmp1; } if(tmp->left) st.push(tmp->left); if(tmp->right) st.push(tmp->right); } } };
递归:
class Solution { public: void Mirror(TreeNode *pRoot) { if(pRoot==NULL){ return; } TreeNode *tmp = pRoot->left; pRoot->left = pRoot->right; pRoot->right = tmp; Mirror(pRoot->left); Mirror(pRoot->right); } };
相关文章推荐
- C语言的类型,字节,还有转义字符0728
- c++pair(类似struct)用法
- C/C++运维中发现的两个隐晦BUG
- C++的cin一些探讨
- c++计算器后续(3)
- C语言中,为什么字符串可以赋值给字符指针变量
- 1. Two Sum(c++实现)
- codeblocks编译出错问题的解答!(编译c++ 或者c程序)
- 在C语言中,double、long、unsigned、int、char类型数据所占字节数
- c++set常用用法
- c++内存对齐
- 求一元二次方程的根
- 黑马程序员:C++学科推出全新三大实战项目
- Cpp环境【POJ3622】【Vijos2990】【Usaco2007】挑剔的美食家
- 【OpenJudge】c语言_计算2的幂
- 【OpenJudge】c语言_A*B问题
- 【OpenJudge】c语言_计算三角形面积
- C语言词法分析:C#源码
- 黑马程序员:C/C++薪资再创纪录,平均薪资11054元!
- c++ 析构函数为什么要加virtual