二叉树 -- 5.4.3 Path Sum -I-II -- 图解

本文探讨了如何在二叉树中寻找一条从根到叶子节点的路径,使得路径上所有节点值的总和等于给定的目标和。通过递归算法实现,包括仅判断路径存在性的简化版和记录具体路径的完整版。

/**********************************************************************************************************
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the
values along the path equals the given sum.
For example: Given the below binary tree and sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ \
7 2 1
return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.
分析
题目只要求返回 true 或者 false,因此不需要记录路径。
由于只需要求出一个结果,因此,当左、右任意一棵子树求到了满意结果,都可以及时 
return。
由于题目没有说节点的数据一定是正整数,必须要走到叶子节点才能判断,因此中途没法剪枝
只能进行朴素深搜

**********************************************************************************************************/

class Solution{
pubic:
        bool hasPath(TreeNode *root, int sum){

            if(!root) return false;
            if(root->left == nullptr && root->right == nullptr)
                return sum == root->val;//结束条件,叶子节点 == 最后差值
        
            return hasPath(root->left, sum - root->val)
                || hasPath(root->right, sum - root>val);
        }

};

下面给出带路径的解法

class Solution{
public:
    vector<vector<int>> pathSum(TreeNode *root,int sum){
        vector<vector<int>>result;
        vector<int> cur;
        pathSum(root, sum ,cur, result);
    }
pivate:
    void pathSum(TreeNode*root,int gap,vector<int>&cur,vector<vector<int>>&result){
        if(!root) return ;
        cur.push_back(root->val);
        if(root->left == nullptr && root->right == nullptr){
            if(gap == root->val)
                result.push_back(cur);
        }
        pathSum(root->left, gap - root->val, cur ,result);
        pathSum(root->right,gap - root->val, cur ,result);
    }

};

 

参考资料:

LeetCode题解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值