Java 试图在二元搜索树中查找对象的最大属性?

Java 试图在二元搜索树中查找对象的最大属性?,java,Java,因此,我试图在由“Persons”组成的二叉搜索树中找到最大的“SSN”,其中每个Persons节点在其信息中存储一个SSN。然而,在通过调试器进行迭代时,一旦我得到最大的SSN(应该是11),程序出于某种原因跳回if循环,即使本地根节点现在为null //“highestSSN”作为0传入 //rootNode作为我的BST的根传入 public static int largestSSN(Node<Integer, Person> rootNode, int highestSSN

因此,我试图在由“Persons”组成的二叉搜索树中找到最大的“SSN”,其中每个Persons节点在其信息中存储一个SSN。然而,在通过调试器进行迭代时,一旦我得到最大的SSN(应该是11),程序出于某种原因跳回if循环,即使本地根节点现在为null

//“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;
}
public static int largestSSN(Node rootNode,int highestSSN){
if(rootNode!=null){
if(rootNode.info.SSN>highestSSN)
highestSSN=rootNode.info.SSN;
最大SSN(rootNode.rightChild,最高SSN);
}
返回最高SSN;
}

程序返回highestSSN为11,rootNode为null,但随后跳回读取“largestSSN(rootNode.rightschild,highestSSN);”的行,并按向后顺序重新计算从根节点11到原始根节点的所有内容。我不知道这是为什么?

你应该阅读返回的最高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;
}
public static int largestSSN(Node rootNode,int highestSSN){
if(rootNode!=null){
//我认为下面的两行是无用的,因为BST已经有rightNode.info.SSN大于rootNode.SSN
if(rootNode.info.SSN>highestSSN)
highestSSN=rootNode.info.SSN;
highestSSN=最大SSN(rootNode.rightChild,highestSSN);//***已更改
}
返回最高SSN;
}

问题在于如何实现递归调用
最大SSN(rootNode.rightschild,highestSSN),即使在得到值后也要不断重复,诀窍是一旦得到最大值就返回,否则就进行递归调用

此外,在方法参数中不需要
highestSSN

public static int largestSSN(Node<Integer, Person> rootNode) {
  if(rootNode.right == null) {
    return rootNode.info.SSN
  else{  
    return largestSSN(rootNode.rightChild);
  }
}
public static int largestSSN(Node rootNode){
if(rootNode.right==null){
返回rootNode.info.SSN
否则{
返回最大的SSN(rootNode.rightChild);
}
}

是的,但当计算SSN(11)最高的节点时,rootNode将变为null,因此该方法应停止递归。