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

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

https://www.nowcoder.com/practice/508378c0823c423baa723ce448cbfd0c?tpId=188&&tqId=36560&rp=1&ru=/ta/job-code-high-week&qru=/ta/job-code-high-week/question-ranking

- 题目描述:
图片说明

- 题目链接:

https://www.nowcoder.com/practice/508378c0823c423baa723ce448cbfd0c?tpId=188&&tqId=36560&rp=1&ru=/ta/job-code-high-week&qru=/ta/job-code-high-week/question-ranking
- 设计思想:
图片说明
详细操作流程看下图
图片说明

-视频讲解链接B站视频讲解

- 代码:
c++版本:

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

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @param sum int整型 
     * @return bool布尔型
     */
     bool flag = false; //用于返回最后的结果
    void dfs(TreeNode* root,int sum,int cnt){
        if(root == NULL || flag == true) return; //如果节点为空或者flag已经为true直接返回
        cnt += root->val; //用于存储路径和
        if(root->left == NULL && root->right == NULL){//已经到达了叶子节点
            if(sum == cnt){//进行判断当前路径和是否等于给定的预期值
                flag = true; 
            }
        }else{
            dfs(root->left,sum,cnt);//递归左子树
            dfs(root->right,sum,cnt); //递归右子树
        }
    }
    bool hasPathSum(TreeNode* root, int sum) {
        dfs(root,sum,0);
        return flag;

    }
};

Java版本:

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param root TreeNode类 
     * @param sum int整型 
     * @return bool布尔型
     */
    boolean flag = false; //用于返回最后的结果
    void dfs(TreeNode root,int sum,int cnt){
        if(root == null || flag == true) return ; //如果节点为空或者flag已经为true直接返回
        cnt += root.val; //用于存储路径和
        if(root.left == null && root.right == null){ //已经到达了叶子节点
         if(sum == cnt){//进行判断当前路径和是否等于给定的预期值
                flag = true; 
            }
        }else{
            dfs(root.left,sum,cnt);//递归左子树
            dfs(root.right,sum,cnt); //递归右子树
        }
    }
    public boolean hasPathSum (TreeNode root, int sum) {
        dfs(root,sum,0);
        return flag;

    }
}

Python版本:

class Solution:
    Flag = False #用于返回最后的结果
    def hasPathSum(self , root , sum ):
        def dfs(root,sum,cnt):
            if root == None or self.Flag == True: return #如果节点为空或者flag已经为true直接返回
            cnt += root.val #用于存储路径和
            if root.left == None and root.right == None: #已经到达了叶子节点
                if cnt == sum : self.Flag = True #进行判断当前路径和是否等于给定的预期值
            else:
                dfs(root.left,sum,cnt) #递归左子树
                dfs(root.right,sum,cnt) #递归右子树

        dfs(root,sum,0)
        return self.Flag
牛客题霸 文章被收录于专栏

本专栏主要是牛客题霸习题的讲解,有详细的考点分类,大家可以可以看看呦!!!

全部评论
一定要到达叶子节点才算一条路径吗?如果没有达到叶子节点就等于指定值了呢?
点赞 回复 分享
发布于 2021-07-17 18:01

相关推荐

06-04 20:17
门头沟学院 Java
牛客713608542号:有的,我今天刚面了一个小厂,他们说刚好有缺人,就放出来了,成都的旅鸽,hxd不如去试试,但是是线下哇,不知道他们支不支持线上,如果有面记得多复习一下sql,我死在这一块上了
点赞 评论 收藏
分享
牛客928043833号:在他心里你已经是他的员工了
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

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