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();
            }
        }
    }
};
相关推荐
π同学15 小时前
基于RT-Thread的STM32开发第十二讲SD卡篇——DFS文件系统
stm32·dfs·rtthread·sdio
山顶夕景5 天前
【BFS】两壶水倒出k升水
算法·leetcode·bfs·宽度优先
燃于AC之乐6 天前
我的算法修炼之路--6 ——模幂、构造、背包、贪心、剪枝、堆维护六题精析
c++·数学·算法·贪心算法·dfs·剪枝·01背包
罗湖老棍子6 天前
最优乘车(travel)(信息学奥赛一本通- P1377)
算法·图论·bfs·最短路·字符串流·单向边
Q741_14710 天前
C++ 队列 宽度优先搜索 BFS 力扣 429. N 叉树的层序遍历 每日一题
c++·算法·leetcode·bfs·宽度优先
課代表12 天前
bat 批处理中 FOR 命令的变量修饰符
脚本·bat·环境变量·批处理·路径·扩展名·短名称
源代码•宸12 天前
Leetcode—1123. 最深叶节点的最近公共祖先【中等】
经验分享·算法·leetcode·职场和发展·golang·dfs
源代码•宸12 天前
Leetcode—865. 具有所有最深节点的最小子树【中等】
开发语言·经验分享·后端·算法·leetcode·golang·dfs
Tisfy12 天前
LeetCode 0865.具有所有最深节点的最小子树:深度优先搜索(一次DFS + Python5行)
算法·leetcode·深度优先·dfs·题解
Q741_14712 天前
C++ 队列 宽度优先搜索 BFS 力扣 429. N 叉树的层序遍历 C++ 每日一题
c++·算法·leetcode·bfs·宽度优先