所以我试图找到最大的" SSN"在由#34; Persons"组成的二进制搜索树中,每个Person节点在其信息中存储SSN。但是,迭代调试器,一旦我得到应该是11的最大SSN,程序由于某种原因跳回到if循环,即使本地根节点现在为空。
//"最高SSN"传入为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;
}
程序返回最高SSN为11且rootNode为null,但随后它跳回到读取&#34; maximumSSN(rootNode.rightChild,highestSSN);&#34;的行,并重新评估来自的所有内容原始根的11个根节点,按向后顺序排列。我不确定为什么会这样?
答案 0 :(得分:0)
您应该阅读返回的最高SSN。试试这个:
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;
}
答案 1 :(得分:0)
问题在于如何实现递归调用largestSSN(rootNode.rightChild, highestSSN);
,即使在获得值后也会继续重复它,诀窍是只要获得最大值就返回,否则你执行递归调用< / p>
此外,您在方法参数
中不需要highestSSN
public static int largestSSN(Node<Integer, Person> rootNode) {
if(rootNode.right == null) {
return rootNode.info.SSN
else{
return largestSSN(rootNode.rightChild);
}
}