【问题标题】:Find a vertex of size k in an AVL tree在 AVL 树中找到大小为 k 的顶点
【发布时间】:2017-10-17 10:54:25
【问题描述】:

设 a 为具有 n 个顶点的 AVL 树。 每个顶点都有一个扩展,表示其子树的大小,以顶点本身为根。我正在尝试实现一种算法,该算法将数字 k s.t. 作为输入。 1

如果树是一棵完整的二叉树,我们可以很容易地向右/向左移动,直到到达所需大小的节点,因为高度为 h 的所有节点都将具有相同的大小。但是当树没有满时我就会卡住。

任何帮助将不胜感激。

提前致谢!

附:我假设每个顶点都有不同的值。

【问题讨论】:

  • 我认为不可能。由于节点不是根据它们的“大小”排序的,最坏的情况是你必须遍历所有节点。您可以停止遍历大小小于 k 的分支,但在最坏的情况下,您必须遍历所有分支。

标签: algorithm avl-tree


【解决方案1】:

首先检查左子树是否大于 k,如果是 -> 继续在其中搜索。 否则,检查左子树的大小 + 1 是否等于 k,在这种情况下,当前元素是第 k 个,因此返回当前节点。 如果我们已经到达这一点,则意味着第 k 个元素将在右子树中,因此继续移动到右子树并搜索 k - (left sub tree size + 1) 元素,因为我们已经消除了所有这些节点。

【讨论】:

    猜你喜欢
    • 2013-12-06
    • 1970-01-01
    • 2016-02-25
    • 2021-02-18
    • 1970-01-01
    • 2022-01-16
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多