这是剑指offer的面试题25,本题我采用java实现,实现原理参考剑指offer的解释
java实现代码如下所示
//二叉树结构
package chagemoney;
public class BinaryTreeNode {
private int value;
private BinaryTreeNode leftNode;
private BinaryTreeNode rightNode;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public BinaryTreeNode getLeftNode() {
return leftNode;
}
public void setLeftNode(BinaryTreeNode leftNode) {
this.leftNode = leftNode;
}
public BinaryTreeNode getRightNode() {
return rightNode;
}
public void setRightNode(BinaryTreeNode rightNode) {
this.rightNode = rightNode;
}
}
package chagemoney;
import java.util.Stack;
public class FindPath {
int currentSum = 0;
Stack<Integer> s = new Stack<Integer>();
public static void main(String[] args) {
BinaryTreeNode root1 = new BinaryTreeNode();
BinaryTreeNode node1 = new BinaryTreeNode();
BinaryTreeNode node2 = new BinaryTreeNode();
BinaryTreeNode node3 = new BinaryTreeNode();
BinaryTreeNode node4 = new BinaryTreeNode();
root1.setLeftNode(node1);
root1.setRightNode(node2);
node1.setLeftNode(node3);
node1.setRightNode(node4);
root1.setValue(10);
node1.setValue(5);
node2.setValue(12);
node3.setValue(4);
node4.setValue(7);
FindPath test = new FindPath();
test.findPath(root1, 22);
}
private void findPath(BinaryTreeNode root, int sum) {
// TODO Auto-generated method stub
if (root == null) {
return;
}
currentSum += root.getValue();
s.push(root.getValue());
if (root.getLeftNode() == null && root.getRightNode() == null) {
if (currentSum == sum) {
System.out.println("find a path");
for (int path : s) {
System.out.println(path + " ");
}
System.out.println();
}
}
if (root.getLeftNode() != null) {
findPath(root.getLeftNode(), sum);
}
if (root.getRightNode() != null) {
findPath(root.getRightNode(), sum);
}
//
// currentSum -= root.getValue();
// System.out.println(currentSum);
currentSum -= s.peek().intValue();
s.pop();
}
}
运行结果如下: