IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]LeetCode -- Path Sum III

    csharp25发表于 2017-02-19 22:35:19
    love 0
    题目描述:
    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.


    给定一个二叉树,遍历过程中收集所有可能路径的和,找出和等于X的路径树。


    思路:
    设当前节点为root,分别收集左右节点路径和的集合,merge到当前集合中;
    将当前节点添加到数组中,构成新的可能路径。


    实现代码:


    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     public int val;
     *     public TreeNode left;
     *     public TreeNode right;
     *     public TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        
        private int _sum;
        private int _count;
        public int PathSum(TreeNode root, int sum) 
        {
    		_count = 0;
    		_sum = sum;
        	Travel(root, new List<int>());
        	return _count;
        }
        
        private void Travel(TreeNode current, List<int> ret){
    		if(current == null){
    			return ;
    		}
    		
    		if(current.val == _sum){
    			_count ++;
    		}
    		
    		var left = new List<int>();
    		Travel(current.left, left);
    		
    		var right = new List<int>();
    		Travel(current.right, right);
    		
    		ret.AddRange(left);
    		ret.AddRange(right);
    		
    		for(var i = 0;i < ret.Count; i++){
    			ret[i] += current.val;
    			if(ret[i] == _sum){
    				_count ++;
    			}
    		}
    		ret.Add(current.val);
    		
    		//Console.WriteLine(ret);
        }
    }




沪ICP备19023445号-2号
友情链接