527 字
3 分钟
代码随想录算法训练营第十一天 | 二叉树 Part01

二叉树基础#

  • 二叉树是每个节点最多有两个子节点的树结构,常用于表示层次关系。
  • 二叉树的基本操作包括插入、删除、查找等。
  • 二叉树的遍历方式有前序、中序、后序和层序遍历。

递归遍历#

  • 递归是处理树结构的常用方法,通过递归函数访问每个节点。
  • 前序遍历:访问根节点 -> 访问左子树 -> 访问右子树。
  • 中序遍历:访问左子树 -> 访问根节点 -> 访问右子树。
  • 后序遍历:访问左子树 -> 访问右子树 -> 访问根节点。

144. 二叉树的前序遍历#

LeetCode 144. 二叉树的前序遍历

from typing import Optional, List
# 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 preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
res = []
self.dfs(root, res)
return res
def dfs(self, root, res):
if not root:
return
# 先访问根节点
res.append(root.val)
# 再访问左子树
self.dfs(root.left, res)
# 最后访问右子树
self.dfs(root.right, res)

94. 二叉树的中序遍历#

LeetCode 94. 二叉树的中序遍历

class Solution:
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
res = []
self.dfs(root, res)
return res
def dfs(self, root, res):
if not root:
return
# 先访问左子树
self.dfs(root.left, res)
# 访问根节点
res.append(root.val)
# 再访问右子树
self.dfs(root.right, res)

145. 二叉树的后序遍历#

LeetCode 145. 二叉树的后序遍历

class Solution:
def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
res = []
self.dfs(root, res)
return res
def dfs(self, root, res):
if not root:
return
# 先访问左子树
self.dfs(root.left, res)
# 再访问右子树
self.dfs(root.right, res)
# 最后访问根节点
res.append(root.val)

层序遍历#

  • 层序遍历是按层次从上到下、从左到右访问二叉树的节点。
  • 通常使用队列(Queue)来实现层序遍历。

通用模板#

from collections import deque
from typing import Optional, List
def level_order_traversal(root: Optional[TreeNode]) -> List[List[int]]:
res = []
if not root:
return res
q = deque([root]) # 初始化队列,放入根节点
while q:
size = len(q)
level = []
for _ in range(size):
cur = q.popleft() # 当前层出队
level.append(cur.val)
if cur.left:
q.append(cur.left) # 左子节点入队
if cur.right:
q.append(cur.right) # 右子节点入队
res.append(level) # 当前层结束,添加到结果中
return res
代码随想录算法训练营第十一天 | 二叉树 Part01
https://fuwari.vercel.app/posts/code_musings_day_eleven/
作者
Jarrett
发布于
2025-06-23
许可协议
CC BY-NC-SA 4.0