【问题标题】:Printing the kth smallest in a BST, difficulty applying recursion在 BST 中打印第 k 个最小的,难以应用递归
【发布时间】:2013-01-04 02:15:21
【问题描述】:

我目前正在使用以下代码按顺序遍历 BST。我的问题是,一旦达到第 k 个最小值,所有计算就会停止。

http://codepad.viper-7.com/XMGcxz

我的问题在于以下功能

public function _kthSmallest($node, $k){        

    if($node->left != NULL){
        $this->_kthSmallest($node->left, $k);
    }        
    echo $node->data . ' ';
    self::$counter++;
    echo self::$counter . "<br/>";

    /*
    if(self::$counter >= $k){
        return $node->data;
    }        
    */    

    if($node->right != NULL){

        $this->_kthSmallest($node->right, $k);
    }        
}

如果我取消注释这段代码,我会遇到问题,因为根节点总是被打印出来。

/*
if(self::$counter >= $k){
    return $node->data;
}        
*/

关于在我达到第 k 个最小后如何停止的任何想法?目前该功能在整个 BST 中持续运行。

【问题讨论】:

  • 这是程序代码。为什么它被标记为 OOP?

标签: php data-structures


【解决方案1】:

如果是self::$counter &gt; $k,则返回。

实际上,你不应该进入那种状态。

由于您的函数似乎打算返回一个节点,因此如果计数较小,您将返回 NULL。

如果计数相等,则返回当前节点。如果递归返回非 NULL,您将立即返回相同的值。

【讨论】:

  • 我对@9​​87654322@ 的不好,但是即使在我进行了更改之后,问题仍然存在。我已经适当地更改了指向键盘的链接以及我在原始帖子中包含的示例代码。你能提供一个更新的键盘链接吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
  • 1970-01-01
  • 2020-03-02
  • 2018-03-26
相关资源
最近更新 更多