package sort;
import java.util.ArrayList;
import java.util.Currency;
public class Test34 {
public static void main(String[] args) {
int deepth = 2;
// int rootvalue=1;
BinayTreeNode root = new BinayTreeNode(1, null, null);
makeTree(root, deepth);
findPath(root, 18);
}
public static void findPath(BinayTreeNode bt, int expsum) {
// 使用list额外保存数据,由于是在递归中使用list,为防止一次递归影响其他递归结果
// 每次添加数据后一定要在最后进行删除
ArrayList<Integer> list = new ArrayList<Integer>();
findPath(bt, expsum, list, 0);
}
private static void findPath(BinayTreeNode bt, int expsum,
ArrayList<Integer> list, int curentSum) {
if (bt == null)// 递归出口,
return;
list.add(bt.value); // 添加节点
curentSum += bt.value;// 把该节点的值累加入当前值
if (bt.left == null && bt.right == null && curentSum == expsum) {
// 判断当前值是否已经等于期望结果并且该节点没有左右子节点,满足条件则说明成功 ,输出list
System.out.println(list);
}
if (bt.left != null)// 不满足上步要求,则将当前步骤对结果的影响扩散到下一步
findPath(bt.left, expsum, list, curentSum);// 进入下一步
if (bt.left != null)
findPath(bt.right, expsum, list, curentSum);// 进入下一步
list.remove(list.size() - 1);// 下一步中已经产生了结果,如果等于expsum已经输出了结果,如果不等于
// 也已经对节点进行删除, 还需要在本本步骤中删除已经添加的节点方便上一层节点计算
}
private static void makeTree(BinayTreeNode node, int deep) {
System.out.println(node.value);
// TODO Auto-generated method stub
if (deep > 0) {
node.left = new BinayTreeNode(node.value * 2, null, null);
node.right = new BinayTreeNode(node.value * 2 + 1, null, null);
makeTree(node.left, deep - 1);
makeTree(node.right, deep - 1);
}
}
}