输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
思路
利用前序遍历递归中的栈,并非是非递归版本中的栈。
代码
package com.panda.niuke;
import java.util.ArrayList;
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class test {
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
ArrayList<Integer> temp = new ArrayList<>();
int currentSum = 0;
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) {
if (root==null) return result;
help(root, target);
return result;
}
public void help(TreeNode root, int target) {
temp.add(root.val);
currentSum += root.val;
boolean leaf = (root.left == null && root.right == null);
if (leaf && currentSum == target) {
result.add(new ArrayList<>(temp));
}
if (root.left != null) {
help(root.left, target);
}
if (root.right != null) {
help(root.right, target);
}
currentSum -= temp.remove(temp.size() - 1);
}
public static void main(String[] args) {
TreeNode one = new TreeNode(10);
TreeNode two = new TreeNode(5);
TreeNode three = new TreeNode(12);
TreeNode four = new TreeNode(4);
TreeNode five = new TreeNode(7);
one.left=two;one.right=three;
two.left=four;two.right=five;
test t = new test();
t.FindPath(one, 22);
System.out.println(t.result);
}
}