[英]Trying to find the largest property of an object in a Binary Search Tree?
因此,我试图在由“人员”组成的二进制搜索树中找到最大的“ SSN”,其中每个“人员”节点在其信息中存储一个SSN。 但是,通过调试器进行迭代,一旦我得到最大的SSN应该为11,即使本地根Node现在为空,程序由于某种原因也会跳回到if循环中。
//“ highestSSN”作为0传递// rootNode作为我的BST的根传递
public static int largestSSN(Node<Integer, Person> rootNode, int highestSSN) {
if(rootNode != null) {
if (rootNode.info.SSN > highestSSN)
highestSSN = rootNode.info.SSN;
largestSSN(rootNode.rightChild, highestSSN);
}
return highestSSN;
}
程序返回的highestSSN为11,并且rootNode为空,但随后跳回到读取“ largestSSN(rootNode.rightChild,highestSSN);”的行,并重新评估从11的根节点到原始根的所有内容,以倒序排列。 我不确定为什么会这样吗?
您应该阅读返回的highestSSN。 尝试这个:
public static int largestSSN(Node<Integer, Person> rootNode, int highestSSN) {
if(rootNode != null) {
//I think following 2 lines are useless, since BST already has rightNode.info.SSN greater than rootNode.SSN
if (rootNode.info.SSN > highestSSN)
highestSSN = rootNode.info.SSN;
highestSSN=largestSSN(rootNode.rightChild, highestSSN);//***CHANGED
}
return highestSSN;
}
问题在于如何实现递归调用largestSSN(rootNode.rightChild, highestSSN);
,即使您获得了值,您仍会重复执行此操作,诀窍是您一旦获得最大值就返回,否则进行递归调用
此外,您不需要在方法参数中使用highestSSN
public static int largestSSN(Node<Integer, Person> rootNode) {
if(rootNode.right == null) {
return rootNode.info.SSN
else{
return largestSSN(rootNode.rightChild);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.