问题
给定一个二叉树,它的每个结点都存放着一个整数值。
找出路径和等于给定数值的路径总数。
路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。
例子
思路
双重递归:
#任意结点开始,任意结点结束,路径上的结点和为sum的个数
def pathSum(root,sum)
#从根结点开始的路径数
get(root,sum)
#左子树开始的路径数
pathSum(root.left,sum)
#右子树开始的路径数
pathSum(root.right,sum)
#根节点开始,任意节点可作为结束,且路径上的节点和为 sum 的路径的个数
def get(root,sum):
答案
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
private int n=0;
public int pathSum(TreeNode root, int sum) {
if (root==null) return 0;
get(root,sum);
pathSum(root.left,sum);
pathSum(root.right,sum);
return this.n;
}
public void get(TreeNode root, int sum) {
if (root==null) return;
if (root.val==sum) this.n+=1;
sum-=root.val;
get(root.left,sum);
get(root.right,sum);
}
}
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
n=0
def pathSum(self, root: TreeNode, sum: int) -> int:
if root==None: return 0
self.get(root,sum)
self.pathSum(root.left,sum)
self.pathSum(root.right,sum)
return self.n
#根节点开始,任意节点可作为结束,且路径上的节点和为 sum 的路径的个数
def get(self,root,sum):
if root is None: return 0
if root.val==sum:
self.n+=1
sum-=root.val
self.get(root.left,sum)
self.get(root.right,sum)