16.11.28

来源:互联网 发布:体育视频直播软件 编辑:程序博客网 时间:2024/06/04 18:18

437. Path Sum III

You are given a binary tree in which each node contains an integer value.
Find the number of paths that sum to a given value.
The path does not need to start or end at the root or a leaf, but it must go downwards (traveling only from parent nodes to child nodes).
The tree has no more than 1,000 nodes and the values are in the range -1,000,000 to 1,000,000.
Example:

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

      10     /  \     5   -3    / \    \   3   2   11  / \   \ 3  -2   1Return 3. The paths that sum to 8 are:5 -> 35 -> 2 -> 1-3 -> 11

分析:查找从父节点到子节点路径之和为给定的数的这种情况的总数
Each time find all the path start from current node
Then move start node to the child and repeat.
Time Complexity should be O(N^2) for the worst case and O(NlogN) for balanced binary Tree.

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public int pathSum(TreeNode root, int sum) {        if(root==null)return 0;        return findPath(root,sum)+pathSum(root.left,sum)+pathSum(root.right,sum);    }    public int findPath(TreeNode root,int sum){        int res=0;        if(root==null)return res;        if(root.val==sum)res++;        res+=findPath(root.left,sum-root.val);        res+=findPath(root.right,sum-root.val);        return res;    }}
0 0
原创粉丝点击