527 字
3 分钟
代码随想录算法训练营第十一天 | 二叉树 Part01
二叉树基础
- 二叉树是每个节点最多有两个子节点的树结构,常用于表示层次关系。
- 二叉树的基本操作包括插入、删除、查找等。
- 二叉树的遍历方式有前序、中序、后序和层序遍历。
递归遍历
- 递归是处理树结构的常用方法,通过递归函数访问每个节点。
- 前序遍历:访问根节点 -> 访问左子树 -> 访问右子树。
- 中序遍历:访问左子树 -> 访问根节点 -> 访问右子树。
- 后序遍历:访问左子树 -> 访问右子树 -> 访问根节点。
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. 二叉树的中序遍历
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. 二叉树的后序遍历
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 dequefrom 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/