题目描述
请完成一个函数,输入一个二叉树,该函数输出它的镜像。
例如输入:
1 2 3 4 5
| 4 / \ 2 7 / \ / \ 1 3 6 9
|
镜像输出:
1 2 3 4 5
| 4 / \ 7 2 / \ / \ 9 6 3 1
|
示例 1:
1 2
| 输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]
|
限制:
0 <= 节点个数 <= 1000
题目链接
Leetcode
题目解答
解法一
直接递归,递归过程中交换左右子树的位置,当根节点为空时,递归返回。
时间复杂度:$O(n)$ 空间复杂度:$O(n)$
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
class Solution { public TreeNode mirrorTree(TreeNode root) { if (root == null) return null; TreeNode node = mirrorTree(root.left); root.left = mirrorTree(root.right); root.right = node; return root; } }
|
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:35.7 MB, 在所有 Java 提交中击败了86.90%的用户
解法二
使用队列,队列初始化后加入根节点,当队列不为空时,取出一个节点,交换左右子树的位置,把非空的左右子树加入到队列中,队列中无剩余节点,返回根节点即可。
时间复杂度:$O(n)$ 空间复杂度:$O(n)$
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class Solution { public TreeNode mirrorTree(TreeNode root) { if (root == null) return null; LinkedList<TreeNode> queue = new LinkedList<>(); queue.add(root); while (!queue.isEmpty()) { TreeNode node = queue.poll(); TreeNode temp = node.left; node.left = node.right; node.right = temp; if (node.left != null) { queue.add(node.left); } if (node.right != null) { queue.add(node.right); } } return root; } }
|
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:35.8 MB, 在所有 Java 提交中击败了52.60%的用户
-------------本文结束 感谢您的阅读-------------
文章对您有帮助,可以打赏一杯咖啡,鼓励我继续创作!