繁体   English   中英

在AVL树中找到大于k的第i个最小密钥

[英]Finding the ith smallest key greater than k in an AVL tree

我有一个AVL树,想要实现一个函数,该函数返回大于输入k的第i个最小键。 这是否需要在每个节点上存储子树的大小? 如果有人可以概述一下这个想法,我将不胜感激。 谢谢。

您可以简单地搜索Key+1如果存在),然后获取值,否则您就必须跟踪搜索中最后一次访问的键,因为这将是您的答案。 avl中的搜索例程与BST中的搜索例程相同。

如果允许您将子树的大小存储在每个节点上,则只需搜索值k ,然后在从递归返回的途中,对于您拍摄的每个左子对象,可以将右子对象的大小加一个为父节点。 如果在任何时候该总和大于i ,则必须进入右子项,然后减去右子项再加上一个(再次针对节点本身),然后移至左子项。 如果减去整个合适的孩子太多,则可以递归地移至合适的孩子。 这需要O(lg n)。

在另一方面,如果你不能存储在每个节点上的子树的大小,你必须寻找其中K值应的位置,并从那里上使树的每个计数的中序遍历访问的节点。 由于按顺序访问是从左到右,因此从搜索返回的方式中,您将仅按递增顺序计算大于k的值。 该方法取O(lg n + i)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM