这是我的 find() 方法:
public boolean find(int key) {
BinTreeNode node = findHelper(key, root);
if (node == null) {
return false;
} else {
return true;
}
}
private BinTreeNode findHelper(int key, BinTreeNode node) {
if (node == null) {
return null;
}
if(key == node.item) {
return node;
}
else if(key < node.item) {
return findHelper(key,node.leftChild);
}
else {
return findHelper(key,node.rightChild);
}
}
这是我修改后的代码。它仍然不起作用:(
public boolean searchNum(BinTreeNode node, int num) {
if(node == null) {
return false;
}
else {
int result = num - node.item;
if(find(result)) {
return true;
}
if(node.leftChild != null) {
searchNum(node.leftChild, num);
}
if(node.rightChild != null) {
searchNum(node.rightChild, num);
}
return false;
}
}
我正在尝试查找给定数字是否等于二叉搜索树中任意 2 个数字的总和。我知道错误在哪里,但我不知道如何纠正它。
以下几行
if(find(result)) {
return true;
}
应该终止该方法,因为一旦我得到一个真实的,这就是我所需要的,我应该将值返回给调用函数。但是,递归继续执行,最终返回最后一次递归调用的值。请帮忙。
public boolean searchNum(BinTreeNode node, int num) {
if(node == null) {
return false;
}
else {
if(node.leftChild != null) {
searchNum(node.leftChild, num);
}
int result = num - node.item;
System.out.println(node.item);
//I have a separate find() which finds if the key is in the tree
if(find(result)) {
return true;
}
if(node.rightChild != null) {
searchNum(node.rightChild, num);
}
return false;
}
}
}