二叉树的镜像
题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
二叉树的镜像定义:源二叉树
8
/
6 10
/ \ /
5 7 9 11
镜像二叉树
8
/
10 6
/ \ /
11 9 7 5
解题思路
- 递归法:递归交换每个节点的左右子树
- 非递归法:借助栈,先将根节点入栈,只要栈非空,循环执行:取栈顶节点、交换其左右子节点、将其左右子节点入栈
递归法
class Solution {
public:
void Mirror(TreeNode *pRoot) {
if(pRoot==NULL) return ;
if(pRoot->left==NULL && pRoot->right==NULL) return ;
//先交换左右子树,再递归
TreeNode *tmp=pRoot->left;
pRoot->left=pRoot->right;
pRoot->right=tmp;
if(pRoot->left!=NULL)
Mirror(pRoot->left);
if(pRoot->right!=NULL)
Mirror(pRoot->right);
}
};
非递归法
class Solution {
public:
void Mirror(TreeNode *pRoot) {
if(pRoot==NULL) return ;
if(pRoot->left==NULL && pRoot->right==NULL) return ;
stack<TreeNode *>s;
s.push(pRoot);
while(!s.empty()){
TreeNode *now=s.top();
s.pop();
if(now->left || now->right){
TreeNode *temp=now->left;
now->left=now->right;
now ->right=temp;
}
if(now->left) s.push(now->left);
if(now->right) s.push(now->right);
}
}
};
3051

被折叠的 条评论
为什么被折叠?



