Python
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def flipTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
if not root:
return None
sub_left = self.flipTree(root.right)
sub_right = self.flipTree(root.left)
root.left = sub_left
root.right = sub_right
return root
Java
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);
}
};