题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
时间限制:1秒 空间限制:32768K 热度指数:207660
思路
1.先序递归,将左右子树调换,再将左右子树的左右子树调换;
/*
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 *p) {
if(p==NULL) //结束循环条件
return;
TreeNode *p2=p->left;
p->left=p->right;
p->right=p2;
Mirror(p->left);
Mirror(p->right);
}
};
2.后序
/*
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 *p) {
if(p==NULL)
return;
Mirror(p->left);
Mirror(p->right);
TreeNode *p2=p->left;
p->left=p->right;
p->right=p2;
}
};
3.迭代
/*
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 *p)
{
if(p==NULL)
return;
stack<TreeNode*> stackN;
stackN.push(p);
TreeNode* t;
TreeNode* f;
while(!stackN.empty())
{
t=stackN.top();
stackN.pop();
if(t!=NULL)
{
f=t->left;
t->left=t->right;
t->right=f;
stackN.push(t->left);
stackN.push(t->right);
}
}
}
};