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();
            }
        }
    }
};
相关推荐
青少儿编程课堂9 小时前
多源最短路与最小环(Floyd 算法图论解析)
c++·python·算法·bfs·信息学竞赛
青少儿编程课堂7 天前
威佐夫博弈(双堆取子游戏)解析
c++·python·算法·bfs·信息学竞赛
青少儿编程课堂20 天前
图形化编程实战:智能交通灯调度台,一个作品讲透循环、条件与广播
c++·python·算法·bfs·信息学竞赛
青少儿编程课堂24 天前
用图形化编程做一个“少年探险闯关”小游戏:方向键控制、碰撞检测与多关卡串起完整项目
c++·python·算法·bfs·信息学竞赛
青少儿编程课堂25 天前
用图形化编程做一个「城市生态小卫士」:克隆体、广播与变量串起完整小游戏
c++·python·算法·bfs·信息学竞赛
Tisfy1 个月前
LeetCode 1406.石子游戏 III:递归(DFS+记忆化) / 递推(DP+原地滚动)
leetcode·游戏·深度优先·dfs·题解·博弈
小北的AI科技分享1 个月前
企业AI定制开发:从需求分析到落地部署的完整指南
定制·模型·路径
Tisfy2 个月前
LeetCode 0486.预测赢家:深度优先搜索(DFS)
算法·leetcode·深度优先·dfs·博弈
起个破名想半天了2 个月前
算法与数据结构之BFS广度优先遍历
数据结构·算法·bfs·宽度优先
拳里剑气2 个月前
C++算法:BFS解决FloodFill算法
c++·算法·bfs·宽度优先