尝试此,使用过载:
public void pathToSum(int sum) {
pathToSum(root, sum);
}
private boolean pathToSum(Node n, int sum) {
if (null != n) {
sum -= n.data;
boolean found = pathToSum(n.left, sum);
if (!found) {
found = pathtoSum(n.right, sum);
}
if (found) {
println(n.data);
return found;
}
}
return 0 == sum ? true : false;
}
此代码与以下类测试:
import java.util.LinkedList;
import java.util.Queue;
public class BST {
Node root;
public BST(){
root = null;
}
public void insert(int el){
Node tmp = root, p=null;
while(null!=tmp && el != tmp.data){
p=tmp;
if(el<tmp.data)
tmp=tmp.left;
else
tmp=tmp.right;
}
if(tmp == null){
if(null == p)
root = new Node(el);
else if(el <p.data)
p.left= new Node(el);
else
p.right=new Node(el);
}
}//
public void pathToSum(int sum) {
pathToSum(root, sum);
}//
private boolean pathToSum(Node n, int sum) {
if (null != n) {
sum -= n.data;
boolean found = pathToSum(n.left, sum);
if (!found) {
found = pathToSum(n.right, sum);
}
if (found) {
System.out.println(n.data);
return found;
}
}
return 0 == sum ? true : false;
}
public static void main(String[] args){
int[] input={50,25,75,10,35,60,100,5,20,30,45,55,70,90,102};
BST bst = new BST();
for(int i:input)
bst.insert(i);
bst.pathToSum(155);
}
}
class Node{
public int data;
public Node left;
public Node right;
public Node(int el){
data = el;
}
}
结果:
45
35
25
50
谢谢,你的方法给了我一个想法:) – noMAD 2012-03-10 01:48:02
不客气。如果您满意,请记住标记为答案。 – kasavbere 2012-03-10 02:12:57
顺便说一句,这工作没有重载'公共布尔hasPathSum(我的根节点,总和) \t { \t \t boolean ret; \t \t if(root == null) \t \t \t return ret = false; \t \t \t \t int subSum = sum - root.value; \t \t \t 如果\t(个子求和== 0 && root.left == NULL && root.right == NULL){ \t \t \t是System.out.print(根。值+“< - ”); \t \t \t return ret = true; \t \t} \t \t别的 \t \t \t RET =(hasPathSum(root.left,个子求和)|| hasPathSum(root.right,个子求和)); \t \t \t 如果\t(RET) \t \t \t是System.out.print(root.value + “< - ”); \t \t \t \t return ret; \t}' – noMAD 2012-03-10 02:58:05