方法1:递归法
- 时间:O(n) ------ 每个节点访问一次
- 空间:O(h) ------ 递归栈深度(h 为树高,最坏 O(n),平均 O(log n))
python
# encoding = utf-8
# 开发者:Alen
# 开发时间: 12:24
# "Stay hungry,stay foolish."
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def invertTree(self, root):
"""
:type root: Optional[TreeNode]
:rtype: Optional[TreeNode]
"""
if not root:
return None
root.left, root.right = root.right, root.left
self.invertTree(root.left)
self.invertTree(root.right)
return root
方法2:迭代法(使用栈)
- 时间:O(n)
- 空间:O(h) ------ 栈最多存 h 个节点
python
# encoding = utf-8
# 开发者:Alen
# 开发时间: 12:24
# "Stay hungry,stay foolish."
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def invertTree(self, root):
"""
:type root: Optional[TreeNode]
:rtype: Optional[TreeNode]
"""
if not root:
return None
stack = [root]
while stack:
node = stack.pop()
node.left, node.right = node.right, node.left
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
return root
结果
解题思路
