1. 二叉树深度优先搜索(DFS)基础概念
深度优先搜索(Depth-First Search)是遍历或搜索树结构最常用的算法之一。对于二叉树而言,DFS的核心思想是尽可能深地探索每一条分支,直到无法继续深入为止,然后回溯到上一个节点继续探索其他分支。
二叉树DFS通常有三种实现方式:
- 前序遍历(Pre-order):根节点 → 左子树 → 右子树
- 中序遍历(In-order):左子树 → 根节点 → 右子树
- 后序遍历(Post-order):左子树 → 右子树 → 根节点
递归实现DFS的代码模板如下:
java复制void dfs(TreeNode root) {
if (root == null) return;
// 前序遍历位置
dfs(root.left);
// 中序遍历位置
dfs(root.right);
// 后序遍历位置
}
在实际问题中,我们需要根据具体需求选择适当的遍历顺序。例如:
- 需要先处理父节点再处理子节点时用前序
- 需要按大小顺序处理二叉搜索树时用中序
- 需要先知道子节点结果才能处理父节点时用后序
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 计算布尔二叉树的值(力扣2331)
2.1 问题分析与解法
这道题要求我们计算一个特殊布尔二叉树的最终值。树中的每个节点要么是叶子节点(值为0或1),要么是非叶子节点(值为2或3,分别代表OR和AND操作)。
递归解法思路:
- 如果当前节点是叶子节点,直接返回其布尔值(0为false,1为true)
- 否则递归计算左右子树的值
- 根据当前节点的运算符对左右子树结果进行OR或AND运算
java复制public boolean evaluateTree(TreeNode root) {
if (root.left == null && root.right == null) {
return root.val == 1;
}
boolean left = evaluateTree(root.left);
boolean right = evaluateTree(root.right);
return root.val == 2 ?
