1 题目描述
来源:力扣(LeetCode)
请完成一个函数,输入一个二叉树,该函数输出它的镜像。
2 解题思路
二叉树镜像定义: 对于二叉树中任意节点 root ,设其左 / 右子节点分别为 left, right;则在二叉树的镜像中的对应 root 节点,其左 / 右子节点分别为 right, left 。1
2.1 递归法
2.2 辅助栈(或队列)
3 代码实现(Python3)
# 法一 递归法
class Solution:
def mirrorTree(self, root: TreeNode) -> TreeNode:
if not root: return
tmp = root.left
root.left = self.mirrorTree(root.right)
root.right = self.mirrorTree(tmp)
return root
# 法二 辅助栈
class Solution:
def mirrorTree(self, root: TreeNode) -> TreeNode:
if not root: return
stack = [root]
while stack:
node = stack.pop()
if node.left: stack.append(node.left)
if node.right: stack.append(node.right)
node.left, node.right = node.right, node.left
return root
4 复杂度分析
法一 递归法:
- 时间复杂度O(N):其中 N 为二叉树的节点数量,建立二叉树镜像需要遍历树的所有节点,占用 O(N) 时间。
- 空间复杂度 O(N) : 最差情况下(当二叉树退化为链表),递归时系统需使用 O(N) 大小的栈空间。
法二 辅助栈:
- 时间复杂度O(N):其中 N 为二叉树的节点数量,建立二叉树镜像需要遍历树的所有节点,占用 O(N) 时间。
- 空间复杂度 O(N) : 最差情况下(当为满二叉树时),栈 stack 最多同时存储 N/2 个节点,占用 O(N) 额外空间。
深入了解复杂度:数据分析学习总结笔记11:空间复杂度和时间复杂度