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();
            }
        }
    }
};
相关推荐
硕风和炜4 小时前
【LeetCode: 958. 二叉树的完全性检验 + bfs + 二叉树】
java·算法·leetcode·二叉树·bfs·宽度优先·完全二叉树
闻缺陷则喜何志丹3 天前
【C++图论 并集查找】2492. 两个城市间路径的最小分数|1679
c++·算法·力扣·图论·路径·最小·分数
利刃大大4 天前
【二叉树深搜】二叉搜索树中第K小的元素 && 二叉树的所有路径
c++·算法·二叉树·深度优先·dfs
lisanndesu6 天前
专题三_穷举vs暴搜vs深搜vs回溯vs剪枝_全排列
dfs·回溯
利刃大大7 天前
【二叉树的深搜】二叉树剪枝
c++·算法·dfs·剪枝
谦川13 天前
洛谷 P2036 [COCI2008-2009 #2] PERKET 刷题笔记
笔记·dfs·搜索
谦川14 天前
洛谷 P2392 kkksc03考前临时抱佛脚 刷题笔记 dfs
笔记·dfs·搜索
深度混淆21 天前
C#,图论与图算法,有向图(Direct Graph)广度优先遍历(BFS,Breadth First Search)算法与源程序
数据结构·深度优先·图论·bfs·广度优先遍历
xchenhao22 天前
Linux 环境(Ubuntu)部署 Hadoop 环境
大数据·linux·hadoop·ubuntu·hdfs·环境·dfs
程序猿零零漆1 个月前
《从入门到精通:蓝桥杯编程大赛知识点全攻略》(一)-递归实现指数型枚举、递归实现排列型枚举
蓝桥杯·深度优先·dfs