该问题应该属于二叉树遍历一类的问题吧。简单描述一下:
/**
* 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。
* 如下二叉树,和25
* 8
* / \
* 8 7
* / \
* 9 2
* / \
* 4 7
* 返回输出结果:8,8,9
* 8,8,2,7
*/
下面用Java代码实现:
定义树节点类:
public class Node {
private int data;
private Node leftNode;
private Node rightNode;
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node getLeftNode() {
return leftNode;
}
public void setLeftNode(Node leftNode) {
this.leftNode = leftNode;
}
public Node getRightNode() {
return rightNode;
}
public void setRightNode(Node rightNode) {
this.rightNode = rightNode;
}
}
实现方法:
public class PathInTree {
public void findPath(Node node,int k) {
if(node == null) return;
Stack<Integer> stack = new Stack<>();
findPath(node,k,stack);
}
private void findPath(Node node, int k, Stack<Integer> path) {
if(node==null) return;
// if(node.getLeftNode()==null&&node.getRightNode()==null) {
if(node.getData()==k) {
System.out.println("路径开始");
for(int i:path)
System.out.print(i+",");
System.out.println(node.getData());
// }
}else {
path.push(node.getData());
findPath(node.getLeftNode(), k-node.getData(),path);
findPath(node.getRightNode(), k-node.getData(), path);
path.pop();
}
}
public static void main(String[] args){
Node root1 = new Node();
Node node1 = new Node();
Node node2 = new Node();
Node node3 = new Node();
Node node4 = new Node();
Node node5 = new Node();
Node node6 = new Node();
root1.setLeftNode(node1);
root1.setRightNode(node2);
node1.setLeftNode(node3);
node1.setRightNode(node4);
node4.setLeftNode(node5);
node4.setRightNode(node6);
root1.setData(8);
node1.setData(8);
node2.setData(7) ;
node3.setData(9);
node4.setData(2);
node5.setData(4);
node6.setData(7);
PathInTree test = new PathInTree();
/**
* 当输入和为25时,结果为:
* 路径开始:8,8,9
* 路径开始:8,8,2,7
*/
test.findPath(root1, 25);
/**
* 当输入和为18时,结果为:
* 路径开始:8,8,2
*/
test.findPath(root1, 18);
}
}