[LeetCode]437. Path Sum III

来源:互联网 发布:淘宝开店保证金30元 编辑:程序博客网 时间:2024/06/03 08:01

题目描述: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   1

Return 3. The paths that sum to 8 are:
5 -> 3
5 -> 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.

解题思路:利用DFS递归求值

/**     * 先序遍历 求值     * @param root     * @param sum     * @return     */    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){        if(root==null)return 0;        //记录符合条件的总数        return sum==root.val?1:0+findPath(root.left,sum-root.val)+findPath(root.right,sum-root.val);    }