0

これはおそらく簡単な質問だと思いますが、C プログラミングを行ってからしばらく経ちました。x ノードで inorder トラバーサルを実行しようとしています。ここで、x は関数に渡す数値です。私の inorder 関数はそれ自体を再帰的に呼び出しており、x ノードを訪問した後にトラバーサルを停止する方法がわかりません。これが私の順序通りのトラバーサル関数です:

void inorder(node h)
 {

     if (h != NULL)
     {
        inorder(h->l);

        printf(" %d\n",h->item);

        inorder(h->r);
     }
      return;

 }

どんなガイダンスも大歓迎です。

4

2 に答える 2

0

これを試してみてください - 訪問したノードの数だけで動作するはずです (訪問したノードの数は、印刷される候補のノードです)。

int inorder(node h, int x)
 {

     if (h != NULL && x > 0)
     {
        x = inorder(h->l, x);

        if (x > 0) {
           printf(" %d\n",h->item);
           x--;
        }
        if (h->r && x > 0)
           x = inorder(h->r, x);
     }
      return x;

 }

[編集: このコードは、訪問したノードの定義と x の値を減らすことについて議論した後、 @nhahtdhによって修正されました。動作するテスト コードは、ここで確認できます。

于 2013-04-10T02:01:54.030 に答える