题目
输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
思路
目标整数减去当前节点值,到根节点等于0就可以打印。
案例
1.功能测试(一条或者多条对应路径;无对应路径;结点值为正负零;)
2.特殊测试(根结点为null)
代码
public class FindPath {
public static class TreeNode{
int val=0;
TreeNode left=null;
TreeNode right=null;
public TreeNode(int val) {
this.val = val;
}
}
private static void findPath(TreeNode root,int num){
if(root==null){
return;
}
ArrayList list=new ArrayList();
printPath(root,num,list);
}
private static void printPath(TreeNode root,int num,ArrayList list){
if(root==null)
return;
list.add(root.val);
num=num-root.val;
if(num==0&&root.left==null&&root.right==null){
for (Object list1 : list) {
System.out.print(list1+" ");
}
System.out.println();
}else{
printPath(root.left,num,list);
printPath(root.right,num,list);
}
list.remove(list.size()-1);
}
public static void construct(TreeNode root, TreeNode left, TreeNode right){
root.left=left;
root.right=right;
}
public static void main(String[] args) {
TreeNode a1=new TreeNode(10);
TreeNode a21=new TreeNode(5);
TreeNode a22=new TreeNode(12);
TreeNode a31=new TreeNode(4);
TreeNode a32=new TreeNode(7);
construct(a1,a21,a22);
construct(a21,a31,a32);
findPath(a1,22);
}
}