非递归版
static class Node { int val; Node left; Node right; public Node(int val) { super(); this.val = val; } } public static void printEdge(Node root, int target) { if (root == null) { return; } List<Node> passed = new ArrayList<>(); // 储存路径 Stack<Node> help = new Stack<>(); // 储存右孩子节点 int sum = 0; while (root != null || !help.isEmpty()) { if (root == null) { root = help.pop(); Node tmp; while (!passed.isEmpty() && (tmp = passed.get(passed.size() - 1)).right != root) { passed.remove(passed.size() - 1); sum -= tmp.val; } } sum += root.val; passed.add(root); if (sum == target) { for (Node n : passed) { System.out.print(n.val + "-->"); } System.out.println(); } if (root.right != null) { help.push(root.right); } root = root.left; } } public static void main(String[] args) { Node n1 = new Node(10); Node n2 = new Node(5); Node n3 = new Node(12); Node n4 = new Node(4); Node n5 = new Node(7); n1.left = n2; n1.right = n3; n2.left = n4; n2.right = n5; printEdge(n1, 22); System.out.println("---------------------"); printEdge(n1, 15); System.out.println("---------------------"); printEdge(n1, 10); System.out.println("---------------------"); printEdge(n1, 100); }递归版
public static void printEdge(Node root, int target, List<Node> passed) { if (root == null) { return; } target -= root.val; passed.add(root); if (target == 0) { for (Node n : passed) { System.out.print(n.val + "--->"); } System.out.println(); } printEdge(root.left, target, passed); printEdge(root.right, target, passed); if (!passed.isEmpty()) { passed.remove(passed.size() -1); } }