using System.Collections.Generic; /* public class TreeNode { public int val; public TreeNode left; public TreeNode right; public TreeNode (int x) { val = x; } }*/ class Solution { public List<List<int>> FindPath(TreeNode root, int expectNumber) { // write code here List<List<int>> routes=new List<List<int>>(); List<int> route=new List<int>(); if(root==null) return routes; Route(root,expectNumber,route,ref routes); return routes; } public void Route(TreeNode root,int sum, List<int> route, ref List<List<int>> routes) { route.Add(root.val); if(root.val==sum && root.left==null && root.right==null) { routes.Add(new List<int>(route)); //由于需要回溯,List是引用类型,所以添加数组时需要保存复制版本,否则最后添加的list会为空 //return; } if(root.left!=null) { Route(root.left, sum-root.val ,route, ref routes); } if(root.right!=null) { Route(root.right, sum-root.val , route, ref routes); } route.RemoveAt(route.Count-1); } }