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();
            }
        }
    }
};
相关推荐
xu_yule4 天前
算法基础-图论基础
数据结构·c++·算法·图论·dfs·bfs·最小生成树
EXtreme354 天前
【数据结构】二叉树进阶:层序遍历不仅是按层打印,更是形态判定的利器!
c语言·数据结构·二叉树·bfs·广度优先搜索·算法思维·面试必考
_dindong6 天前
算法杂谈:回溯路线
数据结构·算法·动态规划·bfs·宽度优先
_OP_CHEN9 天前
【算法基础篇】(三十四)图论基础深度解析:从概念到代码,玩转图的存储与遍历
算法·蓝桥杯·图论·dfs·bfs·算法竞赛·acm/icpc
課代表10 天前
bat 批处理中的路径:%CD%与%~dp0
脚本·bat·环境变量·目录·批处理·路径·相对路径
长安er12 天前
LeetCode 102/103/513 二叉树层序遍历(BFS)三类经典题解题总结
数据结构·算法·leetcode·二叉树·bfs·层序遍历
长安er14 天前
LeetCode 100/101/110/199 对称/平衡二叉树与右视图
算法·leetcode·二叉树·dfs·bfs·递归
罗湖老棍子17 天前
Knight Moves(信息学奥赛一本通- P1257)
c++·算法·bfs
沧澜sincerely18 天前
蓝桥杯11 路径之谜
c++·蓝桥杯·stl·dfs·剪枝
少许极端21 天前
算法奇妙屋(十六)-BFS解决边权为1的多源最短路径问题
算法·bfs·队列·图解算法·边权为1的多源最短路径问题·宽度优先遍历