これは、複数のパラメータを再帰的に行うことができますが、あなたがそうのように、「ETreeNode」インスタンスへのポインタにするたびに渡す必要があります。
bool ETreeNode::preorder(ETreeNode* currentNode, char* s, int& n, const int& len){
bool error = false;
if (!currentNode) // insure that the "currentNode" is not NULL
return true; // you can change this to implement your "error" variable if you want to
//YOUR CODE GOES HERE
if (m_bIsOperator)
{ //operator node
s[n++] = m_chOp; //append operator character to s
preorder(currentNode->m_pLeftChild, s, n, len); // move to the next left node
preorder(currentNode->m_pRightChild, s, n, len); // move to the next right node
s[n++] = '\0'; //zero terminator
} //if
else
{ //number node
char buffer[32]; //temporary character buffer
sprintf(buffer, "%d", m_nValue); //print number into buffer
strcat((char*)(s + n), buffer); //append buffer to s
} //else
return error;
} //preorder
質問:はあなたのデータであり、木はインミックス順ですか?
"n"が "len"以上にならないようにするコードを実装したいと思うでしょう。
また、すべての反復処理の後にプログラムがゼロ終了記号を書き込まないようにする方法も実装したいと考えています。
フィードバックありがとうございます!私はこれを試して、それがどのように機能するか見る。 – HammerQueen
あなたのメソッドを使用すると、関数が別の関連ファイルで使用されているため、コンパイラエラーが発生しました。指示に従って、ここで説明したファイル以外は変更できません。私はあなたの方法がどのように機能するかを見ていますが、私はそれが私の特定の状況において実行可能であるとは思わない。 関数にはまだ3つのパラメータしかないメソッドがありますか? – HammerQueen
通常、これらのようなデータ構造では、データ構造自体を表現し管理するクラスがあり、そのデータ構造の要素を表す少なくとも1つの他のサブクラスが存在します。これはあなたの場合ですか?たとえば、 "ETree"と呼ばれるクラスがありますか?あなたはあなたが持っている "命令"のために "ETreeNode"クラスを変更することはできません。これは学校のプロジェクトなのかそういうことなのでしょうか?新しいクラスを追加できますか?最後の質問ですが、親クラスがあればそれを修正できますか? – Fearnbuster