题目描述
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
分类:二叉树
解法1:后序遍历非递归算法,因为该算法可以保存路径,当遇到叶子节点的时候,就判断是否是所需要的路径。
分类:二叉树
解法1:后序遍历非递归算法,因为该算法可以保存路径,当遇到叶子节点的时候,就判断是否是所需要的路径。
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
import java.util.ArrayList;
public class Solution {
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
ArrayList<TreeNode> stack = new ArrayList<TreeNode>();
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
int top = -1;
int sum = 0;
TreeNode p = root;
do{
while(p!=null){
top++;
sum += p.val;
stack.add(top,p);
p = p.left;
}
boolean flag = true;
TreeNode q = null;
while(top!=-1 && flag){
p = stack.get(top);
if(p.right==q){
if(p.right==null && sum==target){
ArrayList<Integer> t = new ArrayList<Integer>();
for(TreeNode tNode : stack){
t.add(tNode.val);
}
result.add(t);
}
sum -= p.val;
stack.remove(top);
top--;
q = p;
}else{
p = p.right;
flag = false;
}
}
}while(top!=-1);
return result;
}
}