设a是具有n个顶点的AVL树。 每个顶点都有一个扩展,表示其子树的大小,顶点本身为根。我试图实现一个算法,该算法输入数字k s.t. 1< = k< = n并在O(logn)中返回大小为k的顶点。
如果树是一个完整的二叉树,我们可以直接向右/向左移动,直到我们到达具有所需大小的节点,因为高度为h的所有节点都具有相同的大小。但是当树木没有满时,我就会卡住。
非常感谢任何帮助。
提前致谢!
P.S。我假设每个顶点都有不同的值。
答案 0 :(得分:0)
首先检查左子树是否大于k,如果是 - >继续搜索它。 否则,检查左子树的大小+ 1是否等于k,在这种情况下,当前元素是第k个,因此返回当前节点。 如果我们已达到这一点,则意味着第k个元素将位于右侧子树中,因此移动到右侧子树并搜索k - (左子树大小+ 1)元素,因为我们已经消除了所有这些节点。