繁体   English   中英

试图在二进制搜索树中找到对象的最大属性?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM