这是一个面试问题。在BST中找到第二个最大值。

max元素是BST中最右边的叶子。第二个最大值是其父级或左子级。因此,解决方案是遍历BST以找到最右边的叶子并检查其父对象和左 child 。

是否有意义?

最佳答案

回想一下,您可以通过执行修改后的inorder traversal以相反的顺序列出BST的节点,您首先在其中探索正确的子树。这导致了一个简单的算法:

Node rightmost = findRightmostNode(root)
if (rightmost.left != null) {
    return findRightmostNode(rightmost.left)
else{
    return rightmost.parent
}

如果树只有一个元素,它将返回null。

10-08 11:25