这是一种在二叉搜索树中查找特定节点的方法...... 我不知道是什么问题,但由于某种原因,这段代码运行不正常......有什么帮助吗?
public KAUstudent findNodeName(String fName, String lName){
return findNodeName(root, fName, lName);
}
public KAUstudent findNodeName(KAUstudent p , String fName, String lName){
if (p == null)
return null;
else {
// if the data we are searching for is found at p (at the current root)
if (fName.equalsIgnoreCase(p.getFirstName()) && lName.equalsIgnoreCase(p.getLastName()) )
return p;
else if ((fName.compareToIgnoreCase(p.getFirstName())< 0) || (lName.compareToIgnoreCase(p.getLastName()) <0))
return findNodeName(p.getLeft(), fName, lName);
else
return findNodeName(p.getRight(), fName, lName);
}
}
答案 0 :(得分:0)
主要问题是你没有适当的&#34;部分订单&#34;为你的钥匙。关键的比较逻辑必须是这样的:
when majorkey1.compareTo(majorkey2) < 0 :
// less than
when majorkey1.compareTo(majorkey2) == 0 AND
minorkey1.compareTo(minorkey2) < 0 :
// less than
when majorkey1.compareTo(majorkey2) == 0 AND
minorkey1.compareTo(minorkey2) == 0 :
// equal to
when majorkey1.compareTo(majorkey2) > 0 :
// greater than
但这不是你的代码所实现的。
更新 - 更正的版本或多或少是正确的。 (最终的else
是多余的。仔细阅读代码并考虑一下......你应该能够理解我为什么这么说。)
问题#2 :在构建树的代码中,您完全使用了错误的密钥。在搜索树时,以及在决定将新节点添加到树中的位置时,您需要使用相同的键/键对和相同的比较逻辑。
答案 1 :(得分:-1)
我猜这是问题
if (fName.equalsIgnoreCase(p.getFirstName()) && lName.equalsIgnoreCase(p.getLastName()) )
return p;
如果两者都为真,则只返回p。尝试将&&
更改为||
。由于它是BST,因此正确的名字和姓氏可能不在树的同一级别上。
您可以将姓氏中的第一个组合成一个字符串并搜索它。如果你想知道如何做到这一点只是评论,我将解释代码。