问题
解答
1.递归算法
时间复杂度: O(N)
class Solution(object):
def inorderTraversal(self, root):
res = []
def dfs(root):
#root为空就退出函数
if not root:
return 0
#左——添加——右
dfs(root.left)
res.append(root.val)
dfs(root.right)
dfs(root)
return res
调试结果:
2.迭代算法
首先遍历左子树,然后输出栈顶元素,最后遍历右子树。
时间复杂度: O(N)
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
res = []
stack = []
p = root
while p or stack:
# 遍历左子树并压入栈中
while p:
stack.append(p)
p = p.left
# 输出栈顶元素
p = stack.pop()
res.append(p.val)
# 右子树
p = p.right
return res
调试结果: