深度优先遍历介绍
深度优先遍历(DFS,Depth First Traversal)是处理树或图结构时的核心算法之一。其基本思想是尽可能深地搜索树的分支,直到一条路径上的所有节点都被访问完毕,然后回溯到上一层继续寻找其他路径。
在二叉树中,常见的 DFS 形式包括前序、中序和后序遍历。由于树的定义本身就是递归的,采用递归方式实现这三种遍历不仅逻辑清晰,代码也最为简洁。三种遍历的唯一区别在于访问根节点的时机不同,在实际解题时,选择合适的遍历顺序往往能事半功倍。
6. 计算布尔二叉树的值
题目链接
2331. 计算布尔二叉树的值 - 力扣(LeetCode)
题目描述

题目示例

解法:递归
算法思路
这道题本质上是一个自底向上的归约过程。我们可以把问题拆解为:
- 递归终止条件:当遇到叶子节点时,直接返回该节点的值(0 代表 false,1 代表 true)。
- 递归递推关系:对于非叶子节点,先递归获取左右子树的布尔值结果。
- 当前节点计算:根据当前节点的类型(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 == nullptr) {
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);
}
};






