题目:完成一个函数,输入一个二叉树,输出它的镜像。
该题考虑递归较为简单。先交换两个子节点,然后再递归求解。画一个图可以较好的理解。博客上画比较困难,在此就不多画了。代码采用递归和循环两种方式,当然本质没有什么区别。
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;
TreeNode *tmp;
tmp=pRoot->left;
pRoot->left=pRoot->right;
pRoot->right=tmp;
Mirror(pRoot->left);
Mirror(pRoot->right);
}
};
采用循环的方式:
class Solution {
public:
void Mirror(TreeNode *pRoot) {
if(pRoot==NULL)
return;
stack<TreeNode *> st;
st.push(pRoot);
TreeNode *tmp;
while(!st.empty())
{
tmp=st.top();
st.pop();
if(tmp->left)
st.push(tmp->left);
if(tmp->right)
st.push(tmp->right);
TreeNode *temp=tmp->left;
tmp->left=tmp->right;
tmp->right=temp;
}
}
};