leetcode112.路径总和

解法1是DFS,解法2是BFS

DFS应用了前序遍历的方法,BFS用的层序遍历求和,qt表示用队列存储树节点指针,qi表示存储到该节点的路径和

cpp 复制代码
class Solution {
public:
    bool hasPathSum(TreeNode* root, int targetSum) {
        if(!root){
            return false;
        }
        bool flag=false;
        bool& exist=flag;
        // dfs(root,0,targetSum,exist);
        bfs(root,targetSum,exist);
        return exist;
    }
    void dfs(TreeNode* tn,int sum,int targetSum,bool& exist){
        if(!tn){
            return;
        }
        sum+=tn->val;
        if(sum==targetSum&&!tn->left&&!tn->right){
            exist=true;
            return;
        }
        dfs(tn->left,sum,targetSum,exist);
        dfs(tn->right,sum,targetSum,exist);
    }
    void bfs(TreeNode*node,int targetSum,bool& exist){
        if(!node){
            return;
        }
        if(!node->left&&!node->right){
            exist=targetSum==node->val;
        }
        queue<TreeNode*> qt;
        queue<int> qi;
        qt.push(node);
        qi.push(node->val);
        while(!qt.empty()){
            int sz=qt.size();
            for(int i=0;i<sz;++i){
                TreeNode* tn=qt.front();
                int sum=qi.front();
                if(tn->left){
                    int sum1=tn->left->val+sum;
                    if(!tn->left->left&&!tn->left->right&&sum1==targetSum){
                        exist=true;
                        return;
                    }
                    qt.push(tn->left);
                    qi.push(sum1);
                }
                if(tn->right){
                    int sum1=tn->right->val+sum;
                    if(!tn->right->left&&!tn->right->right&&sum1==targetSum){
                        exist=true;
                        return;
                    }
                    qt.push(tn->right);
                    qi.push(sum1);

                }
                qt.pop();
                qi.pop();
            }
        }
    }
};
相关推荐
程序员-King.6 天前
day61—DFS—省份数量(LeetCode-547)
算法·dfs
咚咚轩10 天前
蓝桥杯178 全球变暖
dfs
无影无踪的青蛙13 天前
[C++]洛谷B3626 跳跃机器人(题干 + 详细讲解, BFS练习题)
开发语言·c++·算法·bfs·广度优先
飞川撸码18 天前
【LeetCode 热题100】17:电话号码的字母组合(详细解析)(Go语言版)
算法·leetcode·golang·dfs
GGBondlctrl1 个月前
【leetcode】《BFS扫荡术:如何用广度优搜索征服岛屿问题》
算法·leetcode·bfs·宽度优先·图像渲染·岛屿的数量·被围绕的区域
Flower#1 个月前
D. Apple Tree Traversing 【Codeforces Round 1023 (Div. 2)】
c++·算法·图论·dfs
Aric_Jones1 个月前
FastDFS,分布式文件存储系统,介绍+配置+工具类
java·数据库·redis·分布式·idea·dfs
理想奋斗中1 个月前
【LeetCode Hot100 | 每日刷题】二叉树的层序遍历
算法·leetcode·bfs
Dante7981 个月前
【多源01BFS】Codeforce:Three States
c++·算法·bfs
LucianaiB2 个月前
用魔法打败魔法——获取软件安装路径
ai·软件安装·路径·影刀rpa·影刀ai