题解 | #二叉树中和为某一值的路径(三)#
二叉树中和为某一值的路径(三)
http://www.nowcoder.com/practice/965fef32cae14a17a8e86c76ffe3131f
//本题的主要思路是,要把二叉树中每一个的结点都作为初始结点(需要一个递归),再通过遍历其左、右子树求和(需要一个递归)
public class Solution {
int num = 0;public int FindPath (TreeNode root, int sum) {
TotlePath(root, 0, sum); //从二叉树的根节点开始
return num;
}
//将二叉树中的每一个结点都作为初始结点,每次SomePath()结束后,要重置s的值为0
public void TotlePath (TreeNode root, int s, int sum){
if(root == null)
return;
SomePath(root, s, sum);
s = 0; //重置s
TotlePath(root.left, s, sum);
TotlePath(root.right, s, sum);
}
//从一个给定的初始结点开始, 以其为第一个元素,分别遍历左、右子树,求sum, 满足 s==sum 时,num ++ ,否则要向上回溯,执行s - root.val
public void SomePath (TreeNode root, int s, int sum){
if(root == null)
return;
s = s + root.val;
if(s == sum)
num++;
SomePath(root.left, s,sum);
SomePath(root.right, s,sum);
s = s - root.val; //向上回溯
}
}