题目:
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
思路:
1.典型的回溯法,用递归进行探索。
2.传递的参数包括:root //当前节点. ,expectNumber //期望值 ,sum//当前总数, list //当前遍历过的节点, ret //保存所有路径的容器
3.只有当满足期望值且左右子节点为空时才是期望的路径。
代码:
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>> ret = new List<List<int>>();
dfs(root,expectNumber,0,new List<int>(),ret);
return ret;
}
public void dfs(TreeNode root,int expectNumber,int sum,List<int> list, List<List<int>> ret)
{
if(root == null)
return;
sum += root.val;
list.Add(root.val);
if(sum == expectNumber && root.left ==null && root.right==null)
{
ret.Add(new List<int>(list));
}
else if(sum < expectNumber)
{
dfs(root.left,expectNumber,sum,list,ret);
dfs(root.right,expectNumber,sum,list,ret);
}
list.RemoveAt(list.Count -1);
}
}