深度优先遍历(DFS)简介
深度优先遍历(Depth First Traversal,简称 DFS)是处理树或图结构时最常用的算法之一。其核心思想是尽可能深地搜索树的分支,直到路径尽头再回溯,继续探索其他分支。
在二叉树中,DFS 通常表现为前序、中序和后序遍历。由于树的定义本身具有递归性质,使用递归实现这三种遍历不仅逻辑清晰,代码也最为简洁。三种遍历的唯一区别在于访问根节点的时机不同,根据题目需求选择合适的遍历顺序往往能事半功倍。
6. 计算布尔二叉树的值
题目链接
题目描述
给定一棵满二叉树,其中叶子节点值为 0 或 1(分别代表 False 和 True),非叶子节点值为 2 或 3(分别代表 OR 和 AND)。请返回根节点的布尔运算结果。
题目示例


解法思路
这道题本质上是一个自底向上的递归过程。
- 终止条件:当遇到叶子节点(左右子节点均为空)时,直接返回该节点的值(0 或 1)。
- 递归步骤:对于非叶子节点,先递归计算左右子树的布尔值。
- 合并结果:根据当前节点的值决定运算逻辑。若为 2 则执行 OR 运算,若为 3 则执行 AND 运算。
这里我们采用一种空间优化的写法,利用节点本身的 val 字段暂存子节点的返回值,从而减少额外的栈空间开销。虽然这修改了输入树的结构,但在算法竞赛或特定场景下是可行的技巧。
C++ 代码实现
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
bool evaluateTree(TreeNode* root) {
// 递归结束条件:叶子节点直接返回值
if (root->left == nullptr && root->right == ) {
root->val;
}
root->left->val = (root->left);
root->right->val = (root->right);
root->val == ? (root->left->val || root->right->val)
: (root->left->val && root->right->val);
}
};




