1

再帰を使用した二分探索木のトラバーサルの作成。

void inOrder(void (*inOrderPtr)(T&)) 
{ 
    if(this->left != NULL) 
        inOrder((*inOrderPtr)(this->left)); 
    inOrderPtr(this->data); 
    if(this->right != NULL) 
        inOrder((*inOrderPtr)(this->right)); 
} 

これが関数です。これは明らかに間違っています。この関数は次のように呼び出されます。

first.inOrder(print_vals);

最初はオブジェクトで、print vals は単にオブジェクト内のデータを出力する関数です。各オブジェクトには、data、left、right の 3 つの値があります。関数を使用してこれらのアイテムに実際にアクセスするにはどうすればよいですか?

4

1 に答える 1

3

への呼び出しは、ツリー ノードのメンバーだけを関数にinOrderPtr(this->data)渡しているようです。および要素にアクセスする場合は、 を使用します。これをコンパイルするには、 や の宣言など、さまざまな宣言を変更する必要があります。コードの残りの部分を見ないと、何を変更する必要があるかを判断するのは困難です。dataprint_valsleftrightinOrderPtr(*this)inOrderPtrprint_vals

別の注意として、再帰呼び出しを次のように書きたいと思うかもしれません。

this->left->inOrder(inOrderPtr);

ただし、私はあなたの実装について仮定しています。

于 2008-10-15T21:15:40.793 に答える