94.二叉树的中序遍历
1.题目
2.我的解决方案
- 使用递归解决,这个属于基础题目
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
self.res = []
def traversal(root):
if not root:
return
traversal(root.left)
self.res.append(root.val)
traversal(root.right)
traversal(root)
return self.res
- 时间复杂度: O ( 2 n ) O(2^n) O(2n)
- 空间复杂度: O ( 2 n ) O(2^n) O(2n)
3.官方的解决方案
- 主要是积累非递归方法
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
# 使用非递归的方法解决
self.res = []
stack = []
p = root
while p or stack:
while p:
stack.append(p) # 左子树入栈
p = p.left
p = stack.pop()
self.res.append(p.val) # 存入结果数组
p = p.right # 转换存储右子树
return self.res
- 时间复杂度: O ( 2 n ) O(2^n) O(2n) :二叉树的每个结点都会被访问且访问一次
- 空间复杂度: O ( 2 n ) O(2^n) O(2n)