返回语句不返回控制给调用者在java
问题描述:
我想在Java中练习二叉树,并试图写一个“isPresent”函数。但是,如果参数(testInt
)不是根节点值,则该函数不起作用。它正在进入一个无限循环。我很确定我错过了一些愚蠢的事情。返回语句不返回控制给调用者在java
public class Node {
// Attributes
int value;
Node leftChild;
Node rightChild;
// Constructor
Node (int value) {
this.value = value;
}
// Getter
int getValue() {
return value;
}
boolean isPresent(int testInt) {
Node presentNode = this;
while (presentNode != null) {
if (presentNode.getValue() == testInt) {
return true;
} else if (testInt < presentNode.getValue()) {
presentNode.leftChild.isPresent(testInt);
} else {
presentNode.rightChild.isPresent(testInt);
}
}
return false;
}
}
public static void main(String args[]) {
int[] integers = new int[size];
Arrays.sort(integers);
Node binarySearchTree = createBSTFromSortedArray(integers, 0, size - 1);
if (binarySearchTree.isPresent(testInt)) {
System.out.println("Yes");
} else {
System.out.println("No");
}
in.close();
}
private static Node createBSTFromSortedArray(int[] integers, int start, int end) {
if (end < start) {
return null;
}
int mid = (start + end)/2;
Node binarySearchTree = new Node(integers[mid]);
binarySearchTree.leftChild = createBSTFromSortedArray(integers, start, mid - 1);
binarySearchTree.rightChild = createBSTFromSortedArray(integers, mid + 1, end);
return binarySearchTree;
}
答
在你isPresent
方法,被您忽略的呼吁left
和right
儿童isPresent
的结果。根据情况将left
或right
孩子指定为presentNode
。
变化
} else if (testInt < presentNode.getValue()) {
presentNode.leftChild.isPresent(testInt);
} else {
presentNode.rightChild.isPresent(testInt);
}
到
} else if (testInt < presentNode.getValue()) {
presentNode = presentNode.leftChild;
} else {
presentNode = presentNode.rightChild;
}
哇,这工作。非常感谢。不能相信我错过了!你为我节省了很多时间。 – 2014-12-06 02:29:08