LeetCode中二叉树镜像的实现
题目
实现思路:
通过递归的思路来实现该过程。
步骤:
- 判断当前树是否为空。如果为空直接返回null,反之则执行下一步。
- 判断当前左右子树都为空时,直接返回该树。反之执行下一步
- 判断当前左右子树有一个不为空时,
-
-
-
- 当右子树不为空且左子树为空时,将左子树复制到右子树上。之后让左子树为空。
- 当右子树为空但左子树不为空时,将左子树复制到右子树上。之后让右子树为空。
- 当两子树都不为空时,重复前面上述步骤。之后将左右子树调换
-
-
4. 返回当前树。
Java代码
1 public TreeNode mirrorTree(TreeNode root) { 2 if(root==null){ 3 return null; 4 }else if (root.left!=null||root.right != null){ 6 if (root.right==null){ 7 root.left=mirrorTree(root.left); 8 TreeNode treeNode = new TreeNode(root.left.val); 9 treeNode.left=root.left.left; 10 treeNode.right=root.left.right; 11 root.left=root.right; 12 root.right=treeNode; 13 }else if (root.left == null) { 14 15 root.right=mirrorTree(root.right); 16 TreeNode treeNode = new TreeNode(root.right.val); 17 treeNode.left=root.right.left; 18 treeNode.right=root.right.right; 19 root.right=root.left; 20 root.left=treeNode; 21 }else { 22 root.left=mirrorTree(root.left); 23 root.right=mirrorTree(root.right); 24 TreeNode treeNode = new TreeNode(root.right.val); 25 treeNode.left=root.right.left; 26 treeNode.right=root.right.right; 27 root.right=root.left; 28 root.left=treeNode; 29 } 30 }else { 31 return root; 32 } 33 return root; 34 }