2016-04-02 14 views
0

私はツリーをたどり、その内容を接頭辞、接尾辞、および中置表記に印刷しようとしています。現時点では、プログラムは入力された式の1つの演算子のみを出力します。複数のパラメータを持つツリートラバーサル

私はこれを再帰的に完了する方法を見てきましたが、Nodeのクラスに直接関係していた関数内で1つのパラメータをすべて使用しました。 (Example

ツリーの左右のノードを複数のパラメータで再帰的にトラバースする方法はありますか。それとも実行可能な選択肢ですか? 私に問題を与えているコードは、 "expressiontree.cpp"の32〜42行目ですが、ヘッダーファイルと、コードがコンテキストのために出力するものの例が含まれています。

CODE(ネイティブテキストエディタは私にいくつかの問題を与えているので、リンクはGitHubのに指示します。)あなたたちは持っている任意のアイデアを

ありがとう!

答えて

0

これは、複数のパラメータを再帰的に行うことができますが、あなたがそうのように、「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"以上にならないようにするコードを実装したいと思うでしょう。

また、すべての反復処理の後にプログラムがゼロ終了記号を書き込まないようにする方法も実装したいと考えています。

+0

フィードバックありがとうございます!私はこれを試して、それがどのように機能するか見る。 – HammerQueen

+0

あなたのメソッドを使用すると、関数が別の関連ファイルで使用されているため、コンパイラエラーが発生しました。指示に従って、ここで説明したファイル以外は変更できません。私はあなたの方法がどのように機能するかを見ていますが、私はそれが私の特定の状況において実行可能であるとは思わない。 関数にはまだ3つのパラメータしかないメソッドがありますか? – HammerQueen

+0

通常、これらのようなデータ構造では、データ構造自体を表現し管理するクラスがあり、そのデータ構造の要素を表す少なくとも1つの他のサブクラスが存在します。これはあなたの場合ですか?たとえば、 "ETree"と呼ばれるクラスがありますか?あなたはあなたが持っている "命令"のために "ETreeNode"クラスを変更することはできません。これは学校のプロジェクトなのかそういうことなのでしょうか?新しいクラスを追加できますか?最後の質問ですが、親クラスがあればそれを修正できますか? – Fearnbuster

関連する問題