题解 | #二叉树中是否存在节点和为指定值的路径#

二叉树中是否存在节点和为指定值的路径

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

主要是有一点需要注意:

  • 路径终点必须是叶子

要实现这一点有两个地点需要注意:

  • sum 必须在叶子节点判断
  • 根节点的左右子树必须要和其它子树进行区分。因为不进行区分的话有可能根节点就满足要求了,这时左/右子树其中一个为 nullptr,就会得到错误的结论
class Solution {
public:
    bool      hasPath = false;
    int       target  = 0;
    TreeNode* top     = nullptr;
    void      NodeSum(TreeNode* head, int sum) {
        // 到达叶子节点
        if(!head && sum == target) {
            hasPath = true;
            return;
        }
        if(!head) return;
        if(head == top && !(head->right)) NodeSum(head->left, sum + head->val);
        else if(head == top && !(head->left))
            NodeSum(head->right, sum + head->val);
        else {
            NodeSum(head->left, sum + head->val);
            NodeSum(head->right, sum + head->val);
        }
    }
    bool hasPathSum(TreeNode* root, int sum) {
        if(!root) return false;
        top    = root;
        target = sum;
        NodeSum(root, 0);
        return hasPath;
    }
};
全部评论

相关推荐

希望被捞的猫头鹰很理智:大概率待遇低怕硕士跑路
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务