欢迎转载,转载请务必注明出处:http://blog.csdn.net/alading2009/article/details/44725559
第4题:输入一个整数和一颗二叉树。从树的根节点开始往下访问一直到叶结点所经过的结点形成一条路径。打印出和与输入整数相等的所有路径。
要求:无
涉及到树的算法大多采用递归实现,此处很明显需要一个遍历,每一次递归都要把之前已经获得的信息带下去,这样到达符合要求的叶子结点时就可以打印路径了。
代码:
package test004;
/**
* Created by cq on 2015/3/29.
* 二叉树结点的定义
*/
public class Node {
private int value;
private Node left;
private Node right;
public Node(int value){
this.value = value;
left = null;
right = null;
}
public Node getRight() {
return right;
}
public void setRight(Node right) {
this.right = right;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public Node getLeft() {
return left;
}
public void setLeft(Node left) {
this.left = left;
}
}
package test004;
/**
* Created by cq on 2015/3/29.
* 第四题:输入一个整数和一颗二叉树。从树的根节点开始往下访问一直到叶结点所经过的结点
* 形成一条路径。打印出和与输入整数相等的所有路径。
* 要求: 无
* 注: 二叉树结点的值不一定有序,极端情况下所有节点都要遍历到
*/
public class PathOfTree {
public static void getPathOfBTree(int num, Node tree){
pathOfBTree(num,tree,"");
}
public static void pathOfBTree(int num, Node tree, String path){
if (tree == null || tree.getValue() > num){
return;
}
if (tree.getLeft() == null && tree.getRight() == null && tree.getValue() == num){
System.out.println(path+tree.getValue());
return;
}
pathOfBTree(num-tree.getValue(), tree.getLeft(), path+tree.getValue()+" ");
pathOfBTree(num-tree.getValue(), tree.getRight(), path+tree.getValue()+" ");
}
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.setLeft(n2);
n1.setRight(n3);
n2.setLeft(n4);
n2.setRight(n5);
PathOfTree.getPathOfBTree(22,n1);
}
}
执行结果:
Connected to the target VM, address: '127.0.0.1:60410', transport: 'socket'
Disconnected from the target VM, address: '127.0.0.1:60410', transport: 'socket'
10 5 7
10 12
Process finished with exit code 0