在BST中打印最小的第k个,难以应用递归

时间:2013-01-21 02:17:33

标签: php data-structures

我目前正在使用以下代码执行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。

1 个答案:

答案 0 :(得分:1)

如果self::$counter > $k返回。

实际上,你不应该达到那种状态。

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

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

相关问题