题解 | #牛群特殊路径的数量# java

牛群特殊路径的数量

https://www.nowcoder.com/practice/1c0f95d8396a432db07945d8fe51a4f5

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param root TreeNode类
     * @param sum int整型
     * @return int整型
     */
    int ans = 0;
    public int pathSum (TreeNode root, int sum) {
        // write code here
        if (root == null) {
            return 0;
        }
        preorder(root, sum);
        return ans;
    }

    private void preorder(TreeNode root, int sum) {
        if (root == null) {
            return;
        }
        dfs(root, sum);
        preorder(root.left, sum);
        preorder(root.right, sum);
    }

    private void dfs(TreeNode root, int sum) {
        if (root == null) {
            return;
        }
        sum -= root.val;
        if (sum == 0) {
            ans++;
        }
        dfs(root.left, sum);
        dfs(root.right, sum);
    }
}

该代码使用的编程语言是Java。

这个题目考察的是二叉树的遍历和递归算法。

代码的详细文字解释如下:

  1. 首先定义了一个 TreeNode 结构体,表示二叉树的节点。它包含一个整型的值 val,以及左右子树的指针 left 和 right。
  2. 接下来是 Solution 类,其中定义了一个私有变量 ans,用于记录路径和等于给定值的路径数目。
  3. pathSum 方法是解决问题的入口函数。它接收一个二叉树的根节点和一个整数值作为参数,并返回路径和等于给定值的路径数目。在方法内部,首先判断根节点是否为空,如果为空,则直接返回0。然后调用 preorder 方法来遍历二叉树,同时传递给它根节点和目标值。最后,返回路径数目 ans。
  4. preorder 方法是一个前序遍历的递归函数,用于遍历二叉树的每个节点。它接收一个节点和目标值作为参数,首先判断节点是否为空,如果为空,则直接返回。然后调用 dfs 方法来计算以当前节点为起点的路径和等于目标值的路径数目。接着递归调用 preorder 方法遍历左子树和右子树。
  5. dfs 方法是一个深度优先搜索的递归函数,用于计算以当前节点为起点的路径和等于目标值的路径数目。它接收一个节点和目标值作为参数,首先判断节点是否为空,如果为空,则直接返回。然后将目标值减去当前节点的值。如果目标值等于0,则说明找到了一条路径,将路径数目 ans 增加1。最后,递归调用 dfs 方法计算左子树和右子树中路径和等于目标值的路径数目。

通过递归遍历二叉树的每个节点,计算出以每个节点为起点的路径和等于目标值的路径数目,并累加到 ans 变量中,最终得到路径和等于给定值的路径数目。

全部评论

相关推荐

07-09 12:12
门头沟学院 Java
5月底投简历7月初开奖收获秋招第一个offer,虽然白菜价,但至少能保底了
土木转行ing:土木博士想转图像,最后拿了 tp 提前批 sp 最低档,感觉性价比不高
TP-LINK开奖132人在聊
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-11 11:24
大家还是用ai改吧,我心疼得要死,就当花钱买教训吧,人家直接拿完钱就跑路了
程序员小白条:简历修改700....神奇,又不是帮你面试,咋的,简历修改从双非变92了还是没实习变成有大厂实习了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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