递归
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def invertTree(self, root: TreeNode) -> TreeNode:
if not root:
return root
root.left, root.right = root.right, root.left
self.invertTree(root.left)
self.invertTree(root.right)
return root
-
树中的每个节点都只被访问一次,那么时间复杂度就是 O(n),其中 n是树中节点的个数。在反转之前,不论怎样我们至少都得访问每个节点至少一次,因此这个问题无法做地比 O(n)更好了。
-
本方法使用了递归,在最坏情况下栈内需要存放 O(h)个方法调用,其中 h是树的高度,h∈O(n),空间复杂度为 O(n)。
迭代
class Solution:
def invertTree(self, root: TreeNode) -> TreeNode:
if not root:
return root
stack = [root]
while stack:
node = stack.pop()
if node:
node.left, node.right = node.right, node.left
stack.append(node.left)
stack.append(node.right)
return root
空间复杂度是 O(n),即在最坏的情况下,队列里包含了树中所有的叶子节点。对于一颗完整二叉树来说,叶子节点那一层拥有 [n/2]个节点