0

私のインストラクターは、バイナリ ツリーを印刷する方法について特定の出力要件を持っています。彼は、出力が次のようになることを望んでいます。

ルート{左サブツリー}-{右サブツリー}

すなわち:

12 {18} --{24}

18 {6} --{14}

6 {ヌル} --{ヌル}

等...

私は今日までこれに気づきませんでしたが、プログラムが機能するようになったことにすでに興奮していました。

template<class elemType>
struct nodeType
{
    elemType info;
    nodeType<elemType> *lLink;
    nodeType<elemType> *rLink;
};

template<class elemType>
void bSearchTreeType<elemType>::printPreOrder(nodeType<elemType> *root1)
{
    if(root1 != NULL) {
        cout<<root1->info<<" "<<"{"<<root1->lLink<<"}"<<endl;//this is where I get the errors 
        printPreOrder(root1->lLink);
        printPreOrder(root1->rlink);
    }
}

template <class elemType>void bSearchTreeType<elemType>::insert(const elemType&  insertItem){

    nodeType<elemType> *current; //pointer to traverse the tree
    nodeType<elemType> *trailCurrent; //pointer behind current
    nodeType<elemType> *newNode;  //pointer to create the node

    newNode = new nodeType<elemType>;    newNode->info = insertItem;
    newNode->lLink = NULL;
    newNode->rLink = NULL;


    if (root1 == NULL)
        root1 = newNode;
    else {   
        current = root1;
        while (current != NULL)
        {
            trailCurrent = current;
            if (current->info == insertItem)
            {
                cout << "The item to be inserted is already "; 
                cout << "in the tree -- duplicates are not allowed." << endl;
                return;        
            }
            else if (current->info > insertItem)
                current = current->lLink;
            else
                current = current->rLink;
        }//end while

        if (trailCurrent->info >insertItem)
            trailCurrent->lLink = newNode;       
        else
            trailCurrent->rLink = newNode;    
    }
}

左のサブツリーと右のサブツリーを出力する関数を取得するにはどうすればよいですか。何かを試みるたびに、セグメンテーション違反が発生したり、奇妙なメモリ アドレスが出力されたりします。

ガイダンスとヘルプを探しています。疑似コードからその方法まで、何でも素晴らしいでしょう。私はちょうど混乱しています

EDITED:挿入機能とエラーが発生したときに何をするかを含めるには

4

1 に答える 1

1

次の行に沿って何かを試すことができます。

template<class elemType>
void bSearchTreeType<elemType>::printPreOrder(nodeType<elemType> *root) {
   if( root ) { 
        cout << root->info << " " << endl;

        cout << "{";
        if( root->left ) {
            cout << root->left->info;
        }
        else {
            cout << "NULL";
        }
        cout << "} -- ";

        cout << "{";
        if( root->right ) {
            cout << root->right->info;
        }
        else {
            cout << "NULL";
        }
        cout << "}";

        cout << endl;

        printPreOrder( root->left );

        printPreOrder( root->right );
   }
}
于 2012-11-11T19:59:18.840 に答える