Java 二叉搜索树中的下一个最大元素

Java 二叉搜索树中的下一个最大元素,java,data-structures,binary-search-tree,Java,Data Structures,Binary Search Tree,我正在寻找一个简单的算法来查找二叉搜索树中的下一个最大元素(键),有人能帮忙吗?假设“下一个最大的”是指当前节点所在位置的下一个最大节点 从当前节点向右移动一次。您已转到更高值的节点。然后,尽可能多地向左走。您已在值最低的节点处结束,该节点仍高于开始位置 (来源:) 例如。从60岁开始,向右走一次,尽量向左走几次。你到了62岁 试着用同样的方法。你将在42岁结束 编辑: 这将有助于你的第二个案例。伪代码: If (current.hasNoRightChild) testParent

我正在寻找一个简单的算法来查找二叉搜索树中的下一个最大元素(键),有人能帮忙吗?

假设“下一个最大的”是指当前节点所在位置的下一个最大节点

从当前节点向右移动一次。您已转到更高值的节点。然后,尽可能多地向左走。您已在值最低的节点处结束,该节点仍高于开始位置


(来源:)

例如。从60岁开始,向右走一次,尽量向左走几次。你到了62岁

试着用同样的方法。你将在42岁结束

编辑:

这将有助于你的第二个案例。伪代码:

If (current.hasNoRightChild)
    testParent = current
    nextLargest = maxValueInTree
    While (testParent.hasParent)
        testParent = current.Parent
        If (testParent > current  && testParent < nextLargest)
            nextLargest = testParent
            While (testParent.hasLeftChild)
                testLeftChild = testParent.testLeftChild
                If (testLeftChild > current && testLeftChild < nextLargest)
                    nextLargest = testLeftChild
                End if
            End while
        End if
    End while
End if
If(current.hasNoRightChild)
testParent=当前
nextLargest=maxValueInTree
While(testParent.hasParent)
testParent=current.Parent
If(testParent>current&&testParentcurrent&&testLeftChild
虽然不能保证没有bug,但一般的想法是你检查每一位家长,慢慢地爬到树的顶端。在每个节点上,您停止并查看它是否是“下一个最大的”候选节点(即,它大于您开始的节点,并且小于当前对下一个最大节点的猜测)。在这些站点中的每一个站点上,如果节点大于开始位置,则必须沿着左分支上该节点的子树向下搜索,同时检查每个值。我认为应该这样做,但您可能应该使用随机值对其进行大量测试,以确保没有我们忽略的任何其他情况。

案例1:right(x)是非空的 继任者(x)=右边的最小值(x) 案例2:右侧(x)为空 沿树向上移动,直到当前节点是左子节点:后续节点(x)是当前节点的父节点
如果你不能再进一步(并且你到达了根):x是最大的元素,你如何在BST中找到最大的元素?2) 你需要做什么才能得到第二大的树呢?这取决于你对树的表示和不变量。它们是什么?可能是@Berzerker的复制品-这与你一小时前问的问题基本相同。我们无法为您调试代码,因为您尚未向我们显示所有代码。这是您必须(学会)为自己做的事情。这仅适用于元素具有正确子元素的情况。如果右侧没有节点,则树中没有更大的节点。也许您需要更清楚地定义“下一个最大的元素”是什么意思。根据您的定义,上面树中的“下一个最大的元素”是什么?例如,假设您从节点55开始,您需要遍历到节点41(具有左父引用(60)的节点),然后获取并返回节点60的值。我对上面代码中的实现有一个问题。既然您已经撤销了对这个答案的接受,我想您对它有一个问题。你能解释一下那是什么吗?当给出父指针时-没有给出父指针-