题目
输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
思路
你可以选择。前序、中序、后序遍历。遍历所有子节点即可。直到遍历到叶子结点。就判断这一条路数据的总和是否和给的整数相等。无论判断成功与否,我们都需要将叶子结点弹出,到另外一边进行求和运算。
此题有坑!!!!
你不能单纯的直接添加这条满足的路径,你需要再创建一个list对象进行存储,因为这个是引用类型,引用类型操作的一直是他的地址。我后面还要删除叶子结点。这是不可取的。所以添加满足的路径,我们需要再创建一个对象进行存储。
AC代码
import java.util.ArrayList;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
if(root == null)
return list;
f(root,target,0,new ArrayList<Integer>());
return list;
}
public void f(TreeNode root,int target,int sum,ArrayList<Integer> list1){
if(root == null){
return ;
}
list1.add(root.val);
sum += root.val;
if(sum == target && root.left == null && root.right == null){
list.add(new ArrayList<Integer>(list1));
}else{
f(root.left,target,sum,list1);
f(root.right,target,sum,list1);
}
list1.remove(list1.size() - 1);
}
}