2017-08-09 6 views
1

私はRed-Blackツリーのクラスを持っています。再帰呼び出しの回数を制限する - Java

私はそれを順番に印刷したいので(番号が最小からlaregstに印刷されるように)私はKのみの最小番号を印刷したいしかし

public void printTreeInOrder(Node node){ 
     //in-order printing (sorted) 
     if (!(isNull(node))){ 
      printTreeInOrder((node.getLeft())); 
      System.out.println(node.getValue()); 
      printTreeInOrder(node.getRight()); 
     } 
    } 

:ここ

は、印刷方法です。センチナルを保持し、メソッドが呼び出された回数をカウントするなど、再帰呼び出しの回数を制限できるのは簡単です。

しかし、どのように私は再帰関数でそれをしますか?

私はグローバル変数kを作るを考えて、機能でそれを数えるが、それは、右の音、kは変数自体ではありません、それは定数ではありません。 私は再帰関数で印刷される数値の数を数えることができる方法はありますか?

おかげで、

アラン

+2

例えば(私はそれが質問に答えていない知っている...しかし、実際には再帰のこの種の反復バージョンは、パフォーマンスが向上する傾向があり、早期の停止のようないくつかのものは、より単純わずかです。 '' '場合( - k == 0)return; '' ')。この種のトラバーサルでは、 '' Stack '' 'が必要です。アクションは' '' enumアクション{'GO_LEFT、PRINT、GO_RIGHT}' 'である –

+0

一方では、トラバースの深さと同時に、あなたはボトムKナンバーが欲しいです....あなたは実際にあなたがプリントする番号の数を制限したいと言っているのですか?常に最小の数値を取得したい場合は、トラバースの深さを制限することはできません。質問を修正してください。 –

+0

@ValentinRuano私は実際にあなたが何を意味するのか分かりません。私は木の中のn個のk個の数字だけを印刷し、それを並べ替える - インオーダーします。私は矛盾を見ることができません。 – Alan

答えて

2

方法は、印刷される残りの要素の数を返し、このノードから印刷することができる要素の最大数を受け付けます。

public int printTreeInOrder(Node node, int k){ 
    //in-order printing (sorted) 
    if (k>0 && !(isNull(node))){ 
     k = printTreeInOrder(node.getLeft(),k); 
     if (k>0) { 
      System.out.println(node.getValue()); 
      k--; 
     } 
     return printTreeInOrder(node.getRight(),k); 
    } 
    return k; 
} 
+0

ありがとうございました!トリックをしますか? – Alan

関連する問題