题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
方法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 *pRoot) {
if (pRoot == NULL)
return;
if (pRoot->left == NULL && pRoot->right == NULL)
return;
TreeNode *tmp;
tmp = pRoot->right;
pRoot->right = pRoot->left;
pRoot->left = tmp;
if (pRoot->left != NULL)
Mirror(pRoot->left);
if (pRoot->right != NULL)
Mirror(pRoot->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 *pRoot) {
if (pRoot == NULL)
return;
std::stack<TreeNode *> sTreeNode;
sTreeNode.push(pRoot);
while (sTreeNode.size()) {
TreeNode *pRoot = sTreeNode.top();
sTreeNode.pop();
if (pRoot->left != NULL || pRoot->right != NULL) {
TreeNode *tmp = pRoot->right;
pRoot->right = pRoot->left;
pRoot->left = tmp;
}
if (pRoot->left != NULL)
sTreeNode.push(pRoot->left);
if (pRoot->right != NULL)
sTreeNode.push(pRoot->right);
}
}
};