算法沉淀 —— 深度搜索(dfs)
一、计算布尔二叉树的值
【题目链接】:2331. 计算布尔二叉树的值
【题目】:
【分析】:
在确定一颗二叉树的布尔值前,我们需要先得到左子树、右子树的结果(0/1)。如果左子树、右子树不是叶子节点,显然这是一个递归子问题(将求左子树、右子树的布尔值);
最后就是根据root的值来判断对左/右子树结果的操作(如果是2,按位或;否则为按位与)
【代码实现】:
class Solution {
public:
bool evaluateTree(TreeNode* root) {
if(root->left == nullptr && root->right == nullptr)
return root->val;
//完成二叉树保证如果非叶子节点,则左右子树都不为空
bool ansL = evaluateTree(root->left);//递归处理左子树
bool ansR = evaluateTree(root->right);//递归处理右子树
return root->val == 2 ? ansL | ansR : ansL & ansR;
}
};
二、求根节点到叶节点数字之和
【题目链接】:129. 求根节点到叶节点数字之和
【题目】:
【分析】:
根节点到叶节点数字之和,显然如果当前节点为叶子节点,此时直接返回结果;否则需要得到当前路径之前路径和(假设为prev),此时当前路径数字和为root->val + prev*10
。此时在重复上述过程,如果时叶子节点,直接返回结果;否则转化为递归子问题求解(左子树、右子树只有非空,都有结果)
由于根节点到叶节点的路径可能存在多条,每一条路径都存在一个结果。所以这里我们可以定义一个全局变量来记录最后的累计结果。(具体看代码)
【代码实现】:
class Solution {