package swordOffre.gaopengyu;
import java.util.Stack;
class TreeNode {
int val;
TreeNode left;
TreeNode right;
public TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
public class FindSumInBST34 {
// 剑指offer34题----二叉树中和为某一值的路径
// 1 路径必须是从根节点到叶子节点
// 2 如果路径可以不是从根节点开始到叶子节点就可以怎么做?(有没有父指针)
public static void main(String[] args) {
TreeNode node5 = new TreeNode(4, null, null);
TreeNode node4 = new TreeNode(7, null, null);
TreeNode node3 = new TreeNode(5, node5, node4);
TreeNode node2 = new TreeNode(12, null, null);
TreeNode root = new TreeNode(10, node3, node2);
int target = 22;
findPath(root, target);
}
public static void findPath(TreeNode root, int target) {
Stack<TreeNode> stack = new Stack<TreeNode>();
traverse(root, target, stack, 0);
}
public static void traverse(TreeNode node, int target, Stack<TreeNode> stack, int sum) {
if (node == null) {
return;
}
stack.push(node);
sum += node.val;
if (sum == target && node.left == null && node.right == null) {
print(stack, target);
}
traverse(node.left, target, stack, sum);
traverse(node.right, target, stack, sum);
stack.pop();
sum -= node.val;
}
public static void print(Stack<TreeNode> stack, int target) {
Stack<TreeNode> stackSup = new Stack<TreeNode>();
System.out.println("找到一条和为target=" + target + "的路径:");
while (!stack.isEmpty()) {
TreeNode node = stack.pop();
System.out.print(node.val + "->");
stackSup.push(node);
}
while (!stackSup.isEmpty()) {
TreeNode node = stackSup.pop();
stack.push(node);
}
System.out.println();
}
}
二叉树中和为某一值的路径34
最新推荐文章于 2024-08-23 11:56:42 发布