深度优先遍历介绍
**深度优先遍历(DFS)**是处理树或图结构时最常用的算法之一。它的核心思想是尽可能深地搜索树的分支,直到一条路径上的所有节点都被访问完毕,然后回溯到上一层继续寻找其他路径。
在二叉树中,常见的 DFS 形式包括前序、中序和后序遍历。由于树的定义本身就是递归的,采用递归实现这三种遍历不仅直观,代码也非常简洁。三种遍历的唯一区别在于访问根节点的时机不同。在实际解题中,选择合适的遍历顺序往往能简化问题逻辑。
6. 计算布尔二叉树的值
题目链接
题目描述
给定一个满二叉树,每个节点要么是叶子节点(值为 0 或 1),要么是非叶子节点(值为 2 或 3)。
- 叶子节点的值代表布尔值:0 为 false,1 为 true。
- 非叶子节点的值代表运算符:2 表示 OR,3 表示 AND。
需要返回整棵树的布尔运算结果。

题目示例

解法 (递归)
算法思路
这道题本质上是一个自底向上的递归过程。
- 终止条件:当遇到叶子节点时,直接返回其布尔值(0 或 1)。
- 递归步骤:对于非叶子节点,先递归计算左右子树的值。
- 合并结果:根据当前节点的值决定运算方式。如果是 2(OR),则返回
左 || 右;否则(AND),返回左 && 右。
这里有一个巧妙的实现细节:为了节省空间,我们可以直接在原树上修改节点值来传递中间结果,但这取决于具体场景是否允许修改输入数据。下面的代码展示了标准的递归逻辑。
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) {
(root->left == && root->right == ) {
root->val;
}
leftVal = (root->left);
rightVal = (root->right);
root->val == ? (leftVal || rightVal) : (leftVal && rightVal);
}
};






