题解 | #二叉树中和为某一值的路径(一)#

二叉树中和为某一值的路径(一)

https://www.nowcoder.com/practice/508378c0823c423baa723ce448cbfd0c

1 解题思路

二叉树的链式存储结构很容易想到递归法:

首先确定递归结束条件:已到达叶子结点,判断当前分支数值和是否与给定sum相等。相同返回true,不同返回false。

确定递归子问题:若当前结点有左孩子,则将当前结点值累加到 部分和(part_sum) 作为子问题的参数;有右孩子同理。

假设在左子树已经找到一个分支与给定sum相同,引入剪枝的思想,如果左子树返回结果为true,无需再进入右子树寻找。

2 代码

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @param sum int整型 
     * @return bool布尔型
     */
    bool solver(TreeNode* root,int part_sum,int sum){
        if(!root->left && !root->right){  //到达叶子结点,进行比较并结束递归。
            if((part_sum+root->val)==sum)
                return true;
            else 
                return false;
        }else{   //当前结点不是叶子结点,继续向下探索叶子结点。
            bool left_val=false;
            bool right_val = false;
            if(root->left){
                left_val = solver(root->left,part_sum+root->val,sum);
            }
            if(!left_val && root->right){  //只有左子树中所有分支都不等于sum,才进入右子树寻找;否则跳过节省搜索时间。
                right_val = solver(root->right,part_sum+root->val,sum);
            }
            return left_val || right_val;     
        }
    }
    bool hasPathSum(TreeNode* root, int sum) {
        if(!root)
            return false;
        return solver(root,0,sum);
    }
};

全部评论

相关推荐

行云流水1971:这份实习简历的优化建议: 结构清晰化:拆分 “校园经历”“实习经历” 板块(当前内容混杂),按 “实习→校园→技能” 逻辑排版,求职意向明确为具体岗位(如 “市场 / 运营实习生”)。 经历具象化:现有描述偏流程,需补充 “动作 + 数据”,比如校园活动 “负责宣传” 可加 “运营公众号发布 5 篇推文,阅读量超 2000+,带动 300 + 人参与”;实习内容补充 “协助完成 XX 任务,效率提升 X%”。 岗位匹配度:锚定目标岗位能力,比如申请运营岗,突出 “内容编辑、活动执行” 相关动作;申请市场岗,强化 “资源对接、数据统计” 细节。 信息精简:删减冗余表述(如重复的 “负责”),用短句分点,比如 “策划校园招聘会:联系 10 + 企业,组织 200 + 学生参与,到场率达 85%”。 技能落地:将 “Office、PS” 绑定经历,比如 “用 Excel 整理活动数据,输出 3 份分析表;用 PS 设计 2 张活动海报”,避免技能单独罗列。 优化后需强化 “经历 - 能力 - 岗位需求” 的关联,让实习 / 校园经历的价值更直观。 若需要进一步优化服务,私信
实习,投递多份简历没人回...
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务