二叉树面试题
一、leetcode94.二叉树中序遍历
- 前序:根->左->右(pre_order)
- 中序:左->根->右(in_order)
- 后序:左->右->根(post_order)
1. DFS(深度优先)
# 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: Optional[TreeNode]) -> List[int]:
result = []
def dfs(root):
if root:
dfs(root.left)
result.append(root.val)
dfs(root.right)
dfs(root)
return result
2. 迭代
二、leetcode102. 二叉树的层序遍历
BFS(广度优先)
import collections
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if not root:
return []
result = []
queue = collections.deque()
queue.append(root)
while queue:
level_size = len(queue)
current_level = []
for _ in range(level_size):
node = queue.popleft()
current_level.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
result.append(current_level)
return result