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;

    /**
     * 计算路径和等于给定值的路径数量
     *
     * @param root 二叉树的根节点
     * @param sum 给定的目标和
     * @return 路径和等于给定值的路径数量
     */
    public int pathSum(TreeNode root, int sum) {
        if (root == null)
            return 0;
        preorder(root, sum);
        return ans;
    }

    /**
     * 先序遍历二叉树,在每个节点处调用dfs方法计算路径和等于给定值的路径数量
     *
     * @param root 当前节点
     * @param sum 从根节点到当前节点的路径和
     */
    private void preorder(TreeNode root, int sum) {
        if (root == null)
            return;
        dfs(root, sum);
        preorder(root.left, sum);
        preorder(root.right, sum);
    }

    /**
     * 深度优先搜索,计算从当前节点出发路径和等于给定值的路径数量
     *
     * @param root 当前节点
     * @param 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。

该代码考察的知识点包括:

  • 二叉树的先序遍历
  • 二叉树的深度优先搜索(DFS)
  • 递归算法

代码的文字解释大纲如下:

  1. 定义一个 Solution 类,其中包含一个公有的 pathSum 方法,用于计算路径和等于给定值的路径数量。
  2. 在 pathSum 方法中,首先判断根节点是否为空,如果为空则直接返回0。
  3. 调用 preorder 方法进行先序遍历,同时传入目标和 sum
  4. 返回计算得到的 ans 值作为结果。
  5. 在 preorder 方法中,先序遍历二叉树,对每个节点都调用一次 dfs 方法来计算路径和等于给定值的路径数量。
  6. 递归地调用左子树和右子树,并传入从根节点到当前节点的路径和 sum
  7. 在调用完 dfs 方法之后,分别递归地调用左子树和右子树。
  8. 在 dfs 方法中,深度优先搜索二叉树,计算从当前节点出发路径和等于给定值的路径数量。
  9. 判断当前节点是否为空,如果为空则直接返回。
  10. 将 sum 减去当前节点的值。
  11. 如果 sum 等于0,表示找到一条路径,将 ans 增加1。
  12. 继续递归调用左子树和右子树,传入更新后的 sum 值。
  13. 通过先序遍历和深度优先搜索,可以得到路径和等于给定值的路径数量。
全部评论

相关推荐

10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务