牛客题霸 [二叉树中是否存在节点和为指定值的路径] C++题解/答案

牛客题霸 [二叉树中是否存在节点和为指定值的路径] C++题解/答案

题目描述

给定一个二叉树和一个值\ sum sum,判断是否有从根节点到叶子节点的节点值之和等于\ sum sum 的路径,
例如:
给出如下的二叉树,\ sum=22 sum=22,
在这里插入图片描述

返回true,因为存在一条路径 5\to 4\to 11\to 25→4→11→2的节点值之和为 22

题解:

不断递归左右子树,递归过程中不断用sum-当前节点的值,到叶子节点的是否特判sum减去叶子节点是否为0
注意,要先判断root是否为NULL,再判断左右子树的情况,否则会段错误

代码:

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

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @param sum int整型 
     * @return bool布尔型
     */
    bool hasPathSum(TreeNode* root, int sum) {
        // write code here
        if(root==NULL)return 0;
        if(root->left==NULL&&root->right==NULL&&sum-(root->val)==0)return 1;
        
        return hasPathSum(root->left,sum-(root->val))||hasPathSum(root->right,sum-(root->val));
    }
};
posted @ 2020-11-05 12:20  回归梦想  阅读(112)  评论(0)    收藏  举报