【问题标题】:Find kth min node in AVL tree在 AVL 树中查找第 k 个最小节点
【发布时间】:2013-12-06 01:13:11
【问题描述】:

我现在已经建立了一个AVL树,这是一个在AVL树中找到第k个最小节点的函数 (k 从 0 开始) 代码:

int kthMin(int k)
{
    int input=k+1;
    int count=0;
    return KthElement(root,count,input);
}

int KthElement( IAVLTreeNode * root, int count, int k)
{
    if( root)
    {
        KthElement(root->getLeft(), count,k);
        count ++;
        if( count == k)
            return root->getKey();
        KthElement(root->getRight(),count,k);
    }
    return NULL;
}

它可以找到一些正确的节点,但有些可能会失败,任何人都可以帮我调试这个> 谢谢

【问题讨论】:

    标签: algorithm min avl-tree


    【解决方案1】:

    从根开始,向左递归后,count 将是 1,不管左边有多少个节点。

    您需要在递归调用中更改count,因此将count 更改为通过引用传递(假设这是C++)。

    int KthElement( IAVLTreeNode * root, int &count, int k)
    

    (我认为这里不需要任何其他代码更改即可通过引用工作)。

    除此之外,您还需要实际返回递归调用中生成的值,即更改:

    KthElement(root->getLeft(), count, k);
    

    到:

    int val = KthElement(root->getLeft(), count, k);
    if (val != 0)
       return val;
    

    getRight 也是如此。

    注意我使用的是0,而不是NULLNULL 通常用于引用空指针,它转换为0 int(使用int 时首选后者)。

    这当然假设0 不是您树中的有效节点(否则您的代码将无法工作)。如果是,您需要找到另一个值来使用,或者是指向节点的指针(在这种情况下,您可以使用NULL 表示未找到)。

    【讨论】:

    • 你好,Duke,谢谢你的建议,我现在发现了这个bug,似乎经过一些递归调用,最终的返回值总是最后一行“return NULL”。我现在在 if(count == k) kth=root->getKey(); 行下使用了一个私有变量“int kth”。然后在第一个 Kthmin 函数中返回 kth。然后问题解决了。
    【解决方案2】:

    一般来说,这是任何树中第 K 个最小节点的简单算法:-

    count=0, found=false;
    
    kthElement(Node p,int k) {
    
        if(p==NULL)
            return -1
    
        else {
    
            value = kthElement(p.left)             
            if(found)
                return value 
    
            count++
            if(count==k) {
                found = true
                return p.value
            }
    
            value = kthElement(p.right)
            return value
        }
    }
    

    注意:- 使用全局变量是关键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-18
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 2020-08-21
      相关资源
      最近更新 更多