题解 | #二叉树中和为某一值的路径(三)#

二叉树中和为某一值的路径(三)

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;  //向上回溯
    }
}
全部评论

相关推荐

offer小狗:就这样上秋招??
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
12-25 14:50
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务