我目前使用以下代码来执行按顺序遍历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,您将立即返回相同的值。