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);
}
}
}
本文介绍了一种用于寻找二叉树中所有路径并计算这些路径和的算法。通过递归方式,算法能有效找到从根节点到叶节点的所有路径,当路径和等于预期值时,将该路径输出。
158

被折叠的 条评论
为什么被折叠?



