题目:输入一棵二叉树和一个整数, 打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
import java.util.ArrayList;
public class FindPath {
ArrayList<Integer> path = new ArrayList<>();
ArrayList<ArrayList<Integer>> list = new ArrayList<>();
public ArrayList<ArrayList<Integer>> findPath(TreeNode root,int target) {
if (root==null){
return list;
}
path.add(root.val);
target = target- root.val;
if(target==0 && root.left==null && root.right == null){
list.add(new ArrayList<Integer>(path));
}
findPath(root.left, target);
findPath(root.right, target);
path.remove(path.size()-1);
return list;
}
public static void main(String[] args) {
TreeNode a = new TreeNode(0);
TreeNode b = new TreeNode(1);
TreeNode c = new TreeNode(2);
TreeNode d = new TreeNode(3);
TreeNode e = new TreeNode(4);
TreeNode f = new TreeNode(5);
TreeNode g = new TreeNode(6);
a.left=b;
a.right=c;
b.left=d;
b.right=e;
c.left=f;
c.right=g;
FindPath find = new FindPath();
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
list = find.findPath(a, 7);
for( ArrayList<Integer> path:list ){
for(Integer item: path){
System.out.print(item +" ");
}
System.out.println();
}
}
}
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
打印二叉树的路径
import java.util.ArrayList;
public class FindPath1 {
ArrayList<Integer> path = new ArrayList<>();
ArrayList<ArrayList<Integer>> list = new ArrayList<>();
public ArrayList<ArrayList<Integer>> findPath(TreeNode root) {
if (root==null){
return list;
}
path.add(root.val);
if(root.left==null && root.right == null){
list.add(new ArrayList<Integer>(path));
}
findPath(root.left);
findPath(root.right);
path.remove(path.size()-1);
return list;
}
public static void main(String[] args) {
TreeNode a = new TreeNode(0);
TreeNode b = new TreeNode(1);
TreeNode c = new TreeNode(2);
TreeNode d = new TreeNode(3);
TreeNode e = new TreeNode(4);
TreeNode f = new TreeNode(5);
TreeNode g = new TreeNode(6);
a.left=b;
a.right=c;
b.left=d;
b.right=e;
c.left=f;
c.right=g;
FindPath1 find = new FindPath1();
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
list = find.findPath(a);
for( ArrayList<Integer> path:list ){
for(Integer item: path){
System.out.print(item +" ");
}
System.out.println();
}
}
}
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}