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

时间:2017-05-02 17:55:18

标签: java

所以我试图找到最大的" 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个根节点,按向后顺序排列。我不确定为什么会这样?

2 个答案:

答案 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);
  }
}