Binary Search Tree postorder en preorder Traversals verkeerd

stemmen
1

Ik ben bezig met dit huiswerk waar ik moet mijn binaire zoekboom in preorder, postorder, en inorder te drukken. Echter, het lijkt erop dat alleen mijn inorder methode werkt. Ik heb de volgende testcase gebruikt om mijn werk te controleren.

http://www.theteacher99.btinternet.co.uk/theteacher/newalevel/cp4_5_4.htm

Kunt u een kijkje nemen op mijn onderstaande code te nemen en te zien wat ik verkeerd doe. Alle hulp / oriëntatie zou worden gewaardeerd. Je hoeft niet op te lossen voor mij, laat het me weten wat ik verkeerd doe. Bedankt.

#include <iostream>
#include <fstream>
#include <cstddef>
#include <string>
#include <sstream>
#include <string>

using namespace std;

struct TreeNode
{
    string item;
    TreeNode *left;
    TreeNode *right;
};

class BinarySortTree
{
public:
    BinarySortTree();
    void readFile(string fileName);
    void insert(string key);
    void preorder();
    void postorder();
    void inorder();
    void test();

private:
    TreeNode *root;
    void insert(string key, TreeNode *node);
    void preorderTraverse(TreeNode *node);
    void postorderTraverse(TreeNode *node);
    void inorderTraverse(TreeNode *node);
};


//default constructor, create new binary tree
BinarySortTree::BinarySortTree()
{
    root = NULL;
}

//reads the file and puts items in the tree
void BinarySortTree::readFile(string fileName)
{
    ifstream inputStream(fileName.c_str());

    if(inputStream.is_open())
    {
        string line;

        while( getline(inputStream, line) )
        {
            insert(line);
        }
    }
}

void BinarySortTree::insert(string key)
{
    if(root != NULL)
    {
        insert(key, root);
    }
    else
    {
        root = new TreeNode;
        root->item = key;
        root->left = NULL;
        root->right = NULL;
    }
}

void BinarySortTree::insert(string key, TreeNode *node)
{
    bool done = false;

    while(!done)
    {
        if(key.compare(node->item) < 0)
        {
            if(node->left != NULL)
            {
                node = node->left;
            }
            else
            {
                node->left = new TreeNode;
                node->left->item = key;
                node->left->left = NULL;
                node->left->right = NULL;
                done = true;
            }
        }
        else if(key.compare(node->item) > 0)
        {
            if(node->right != NULL)
            {
                node = node->right;
            }
            else
            {
                node->right = new TreeNode;
                node->right->item = key;
                node->right->left = NULL;
                node->right->right = NULL;
                done = true;
            }
        }
        else if(key.compare(node->item) == 0)
        {
            done = true;
        }
    }
}

void BinarySortTree::preorder()
{
    cout << PreOrder Traversal << endl;
    preorderTraverse(root);
    cout << endl;

}

/*
   1. Start at the root node
   2. Traverse the left subtree
   3. Traverse the right subtree
*/
void BinarySortTree::preorderTraverse(TreeNode *node)
{
    if(node != NULL)
    {
        cout << node->item <<  ;
        preorderTraverse(node->left);
        preorderTraverse(node->right);
    }

}

void BinarySortTree::postorder()
{
    cout << PostOrder Traversal << endl;
    postorderTraverse(root);
    cout << endl;
}

/*
   1. Traverse the left subtree
   2. Traverse the right subtree
   3. Visit the root node
*/
void BinarySortTree::postorderTraverse(TreeNode *node)
{
    if(node != NULL)
    {
        postorderTraverse(node->left);
        postorderTraverse(node->right);
        cout << node->item <<  ;
    }
}

void BinarySortTree::inorder()
{
    cout << InOrder Traversal << endl;
    inorderTraverse(root);
    cout << endl;
}

/*
   1. Traverse the left subtree
   2. Visit the root node
   3. Traverse the right subtree
*/
void BinarySortTree::inorderTraverse(TreeNode *node)
{
    if(node!= NULL)
    {
        inorderTraverse(node->left);
        cout << node->item <<  ;
        inorderTraverse(node->right);
    }
}

void BinarySortTree::test()
{
    cout << root->item << endl;
}


int main()
{
    string fileName = a4.txt;
    BinarySortTree bst;
    bst.readFile(fileName);
    bst.test();

    bst.preorder();
    bst.postorder();
    bst.inorder();

    return 0;
}
De vraag is gesteld op 13/03/2011 om 06:30
bron van user
In andere talen...                            


2 antwoorden

stemmen
1

De code is juist. Maar waar is de main () functie?

antwoordde op 13/03/2011 om 07:37
bron van user

stemmen
1

Je hebt niets aan de hand te doen. Ik heb het compileren, en het werkt prima, en gaat die tests. Ik hoefde niet om een ​​enkele wijziging in de code die u verstrekt te maken - net aan toe te voegen, zodat het samengesteld en geïnitialiseerd de structuren correct.

Zorg ervoor dat u uw toewijzen left/ righttips om NULLin uw constructor voor TreeNode, en op de juiste pas in de D-knooppunt als root. Ook niet vergeten om het even welke nodes die u maakt via verwijderen new TreeNode. Als je ze te maken op de stapel (normale lokale variabele zonder new), hoeft u natuurlijk niet om ze te verwijderen.

antwoordde op 13/03/2011 om 07:41
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more