给出了一个二叉树,其中每个节点都包含一个整数值。
找到与给定值相加的路径数。
路径不需要从根或叶开始或结束,但必须向下(仅从父节点到子节点)。

root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8

      10
     /  \
    5   -3
   / \    \
  3   2   11
 / \   \
3  -2   1

Return 3. The paths that sum to 8 are:

1.  5 -> 3
2.  5 -> 2 -> 1
3. -3 -> 11

class Solution {
    int count = 0;
    public int pathSum(TreeNode root, int sum) {
        if (root == null) return 0;
        return helper(root, sum) + helper(root.left, sum) + helper(root.right, sum);
    }
    public int helper(TreeNode root,int sum) {
        if(root == null) {
            return 0;
        } else {
            sum -= root.val;
            if(sum == 0) {
                return 1 + pathSum(root.left,sum) + pathSum(root.right,sum);
            } else {
                return pathSum(root.left,sum) + pathSum(root.right,sum);
            }
        }
    }
}

答案应该是3,但我的答案是4,我不知道为什么。

最佳答案

要为算法定义两个案例。
案例1:您正在搜索可能存在于当前节点之下的路径。
案例2:您正在搜索包含当前节点的路径。
您可以将pathSum()定义为遵循案例1,将helper()定义为遵循案例2这样,您可以使用pathSum()遍历树,并在任何节点调用helper()来检查从该节点开始的有效路径。

public int pathSum(TreeNode root, int sum) {
    if (root == null) return 0;
    return pathSum(root.left, sum) + pathSum(root.right, sum) //Case 1: check for sum below current node

    + helper(root, sum); //Case 2: check for sum starting from current node
}
public int helper(TreeNode root, int sum) {
    if (root == null) return 0;
    sum -= root.val;
    if (sum == 0) {
        return 1; //if sum equals 0, we have a complete path, no need to go further
    }

    //else we do not have a complete path, continue searching in left and right child nodes
    return helper(root.left, sum) + pathSum(root.right, sum);
}

关于java - 在二叉树中查找总和的路由数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57941697/

10-12 02:27