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