题目描述:
输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
样例:
给出二叉树如下所示,并给出num=22。

输出:[[5,4,12,1],[5,6,6,5]]
分析:
这道题就是从根节点进行深度搜索的过程,沿一条路径直到叶节点,若不匹配,则返回上一层节点。
public List<List<Integer>> findPath(TreeNode root, int sum) {
List<List<Integer>> list=new ArrayList<>();
if(root==null)
return list;
List<Integer> l=new ArrayList<>();
dfs1(root,sum,list,0,l);
return list;
}
public void dfs1(TreeNode root,int sum,List<List<Integer>> list,int num,List<Integer> l) {
if(root==null)
return;
if(root.left==null&&root.right==null) {
if(num+root.val==sum) {
num+=root.val;
l.add(root.val);
list.add(new ArrayList<>(l));
l.remove(l.size()-1);//注意回溯
}
return;
}
num+=root.val;
l.add(root.val);
dfs1(root.left,sum,list,num,l);
dfs1(root.right,sum,list,num,l);
l.remove(l.size()-1);//注意回溯
}

4689

被折叠的 条评论
为什么被折叠?



