题目
翻转一棵二叉树。
递归(深度优先遍历)
翻转当前节点的左右子树。首先从叶子节点开始翻转,当遍历到当前节点的左右子树的子节点都已经完成翻转,那么可以直接交换左右子树的位置,直到根节点的左右子树也翻转完成。
# 时间复杂度:O(N)
# 空间复杂度:O(N)
class Solution:
def invertTree(self, root: TreeNode) -> TreeNode:
if root:
self.invertTree(root.left)
self.invertTree(root.right)
root.left, root.right = root.right, root.left
return root
广度优先遍历
定义一个辅助队列,用来存储当前层的节点,判断当前节点的左子节点是否为空,不空则放入队列;判断当前节点的右子节点是否为空,不空则放入队列。
# 时间复杂度:O(N)
# 空间复杂度:O(N)
class Solution:
def invertTree(self, root: TreeNode) -> TreeNode:
if not root:
return None
queue = [root]
while queue:
temp = queue.pop(0)
temp.left, temp.right = temp.right, temp.left
if temp.left:
queue.append(temp.left)
if temp.right:
queue.append(temp.right)
return root