public class 二叉树中和为某为某一值的路径
{
// 使用回溯算法 递归实现,分析好终止条件
public void findPath(TreeNode root, int expectedNum)
{
if (root == null)
{
return;
}
if (expectedNum <= 0)
{
return;
}
int currentNum = 0;
Stack<Integer> path = null;
findPathCore(root, currentNum, path, expectedNum);
}
void findPathCore(TreeNode root, int currentNum, Stack<Integer> path,
int expectedNum)
{
// 保存当前节点
path.add(root.value);
// 变化当前值
currentNum += root.value;
// flag 是否为叶子节点
boolean isLeaf = root.left == null && root.right == null;
// 找到相关路径
if (currentNum == expectedNum && isLeaf)
{
// 输出相关路径 使用Iterator
Iterator<Integer> res = path.iterator();
while (res.hasNext())
{
System.out.print(res.next());
}
System.out.println();
}
if (root.left != null)
{
findPathCore(root.left, currentNum, path, expectedNum);
}
if (root.right != null)
{
findPathCore(root.right, currentNum, path, expectedNum);
}
// 如果不满足天剑 最关键删除当前节点 进行回溯
path.pop();
}
}