class Solution {
public TreeNode mirrorTree(TreeNode root) {
if (root == null || (root.left == null && root.right == null)) {
return root;
}
if (root.left == null) {
root.left = mirrorTree(root.right);
root.right = null;
} else if (root.right == null) {
root.right = mirrorTree(root.left);
root.left = null;
} else {
TreeNode originL = mirrorTree(root.left);
TreeNode originR = mirrorTree(root.right);
root.left = originR;
root.right = originL;
}
return root;
}
}
Solution1:
递归解法,牢记!
根结点为空的情况容易漏,注意!
/*
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 == 0)//若整棵树的根结点为空则return
return;
if(pRoot->left == NULL && pRoot->right == NULL)//到达叶子结点,return
return;
struct TreeNode *temp;
if(pRoot->left != NULL || pRoot->right != NULL){//存在子树,则交换之
temp = pRoot->left;
pRoot->left = pRoot->right;
pRoot->right = temp;
}
if(pRoot->left)
Mirror(pRoot->left);
if(pRoot->right)
Mirror(pRoot->right);
}
};