【问题标题】:Find next greater element in AVL tree在 AVL 树中查找下一个更大的元素
【发布时间】:2015-03-16 14:07:02
【问题描述】:

假设我有以下 AVL 树,我的任务是找到给定元素的下一个更大的元素(即 7 比 6)。我可以使用什么算法?

【问题讨论】:

  • 我的答案对你来说清楚吗?

标签: avl-tree


【解决方案1】:

你递归地遍历节点,如果你找到了节点 6,那么你返回最深的左孩子..

伪代码:

 function find_bigger_key(key, node):
    if node = null then
      return null
    else if node.key = key then
       return min_node(node)
    else if key < node.key then
       return find_bigger_key(key, node.left)
    else
       return find_bigger_key(key, node.right)

 function min_node(node):
    if node.ltree = null then
      return node
    else
       return min_node(node.ltree)

这只是一个示例,但它取决于您的 AVLTree 对象模型的外观。

python中的示例实现:

class AVLTree(object):
   def __init__(self, key, ltree=None, rtree=None):
      self.key = key ; self.ltree = ltree ; self.rtree = rtree ;
      # perhaps some other attributes here....

   # some other methods here ...

   def find_bigger_key(self, key):
    if not self: return None
    elif self.key == key:
        if self.rtree:
          return self.rtree.min_node()
        else:
          return None
    elif self.key > key:
        return self.left.find_bigger_key(key)
    else:
        return self.right.find_bigger_key(key)

python的示例输出:

>>> # aTree is a avltree object that represents your example
>>> key = 6
>>> found_node = aTree.find_bigger_key(key)
>>> print(found_node)
7
>>> key = 7
>>> found_node = aTree.find_bigger_key(key)
>>> print(found_node)
None

【讨论】:

    猜你喜欢
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 2019-11-29
    • 1970-01-01
    相关资源
    最近更新 更多