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();
            }
        }
    }
};
相关推荐
仟濹10 天前
【算法打卡day10(2026-02-24 周二)复习算法:DFS BFS 并查集】
算法·深度优先·图论·dfs·bfs·广度优先·宽度优先
List<String> error_P11 天前
DFS(深度优先搜索)
数据结构·算法·dfs
漂流瓶jz13 天前
UVA-12569 树上的机器人规划(简单版) 题解答案代码 算法竞赛入门经典第二版
算法·图论·dfs·bfs·uva·算法竞赛入门经典第二版·11214
玄〤13 天前
枚举问题的两大利器:深度优先搜索(DFS)与下一个排列(Next Permutation)算法详解(Java版本)(漫画解析)
java·算法·深度优先·dfs
漂流瓶jz15 天前
UVA-11214 守卫棋盘 题解答案代码 算法竞赛入门经典第二版
c++·算法·dfs·aoapc·算法竞赛入门经典·迭代加深搜索·八皇后
漂流瓶jz16 天前
UVA-1604 立体八数码问题 题解答案代码 算法竞赛入门经典第二版
算法·ida·深度优先·图论·dfs·bfs·迭代加深搜索
Bear on Toilet18 天前
递归_二叉树_48 . 二叉树最近公共祖先查找
数据结构·算法·二叉树·dfs
罗湖老棍子21 天前
星际能量矩阵:树形 DP 的递归与非递归双解
算法·动态规划·dfs·bfs·树型dp·树型动态规划
仟濹22 天前
【算法打卡day7(2026-02-12 周四)算法:BFS and BFS】10__卡码网110_字符串迁移, 11_卡码网105_有向图的完全连通
算法·深度优先·dfs·bfs·宽度优先
源代码•宸23 天前
Leetcode—200. 岛屿数量【中等】
经验分享·后端·算法·leetcode·面试·golang·dfs