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


Printing the kth smallest in a BST, difficulty applying recursion

我目前使用以下代码来执行按顺序遍历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个最小值后停止吗?

如果self::$counter > $k .

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

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

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