题目:
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
思路:
二叉树的遍历分为前序、中序和后序,只有前序遍历是首先访问根结点的。
动态保存根节点到当前节点的path。若当前节点为叶子节点,则判断路径和是否为给定的整数值。直到树的遍历结束。
程序:
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 subject24 {
public static ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target){
ArrayList<ArrayList<Integer>> arrList = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> arr = new ArrayList<Integer>();
int sum = 0;
if(root == null)
return arrList;
count(root, arrList, arr, target, sum);
return arrList;
}
public static void count(TreeNode root, ArrayList<ArrayList<Integer>> arrList, ArrayList<Integer> arr, int target, int sum) {
if(root == null)
return;
sum += root.val;
if(root.left == null && root.right == null) {
if(sum == target) {
arr.add(root.val);
arrList.add(new ArrayList<Integer> (arr));
arr.remove(arr.size()-1);
}
return;
}
arr.add(root.val);
count(root.left, arrList, arr, target, sum);
count(root.right, arrList, arr, target, sum);
arr.remove(arr.size() - 1);
}
}