Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » BST (Binary Search Tree)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
13.11.2005, 11:33 Uhr
~Petr
Gast


Hi guys, I did this program, its BST, its a homework, but I got some error, could anyone look at it? thx a lot

What’s wrong:
- I compiled program, then I did press 0 (inicialization), then 1 (insert data)
- I put some data there (that’s fine)
- I tried preorder, inorder and postorder traversal and it’s writing, Bin. tree is empty! + data
- (for example: Data: 23, 45, 56, 78, 90)
Preorder traversal:
23
Bin. tree is empty!
45
Bin. tree is empty!
56
Bin. tree is empty!
78
Bin. tree is empty!
90
Bin. tree is empty!
Bin. tree is empty!

I tried delete node even whole tree, but there are some errors!!


C++:
#include "iostream"
#include "stdio.h"
#include "conio.h"
#include "malloc.h"
#include "process.h"
#include "stdlib.h"
#include "string.h"

using namespace std;

typedef int tStr;

struct uzel{
    int item;
    struct uzel *right;
    struct uzel *left;
};

typedef struct uzel *BST;
typedef struct uzel uzel;

bool Empty(BST t){
    if(t!=NULL){
        return false;
    }
    else return true;
}

BST Initialize(BST t){
    
    t=NULL;
    return t;
}

BST DeleteTree(BST t){
    
    if(t!=NULL) {
        DeleteTree(t->left);
        DeleteTree(t->right);
        free(t);
    }
    else {
        cout<<"Bin. tree is empty !"<<endl;
    }
    return NULL;
}

BST Search(BST t, int x){
    
    if(t==NULL){
        cout<<"Bin. tree is empty!"<<endl;
        return NULL;
    }
    
    if(x < t->item){
        return Search(t->left,x);
    }
    else{
        if(x > t->item){
            return Search(t->right,x);
        }
    else return t;
    }    
}

BST Insert(BST t, int x){
    
    if(t==NULL) {
        t=(struct uzel*) malloc(sizeof(struct uzel));
            
        t->item = x;
        t->left = t->right = NULL;
        return t;
    }

    
    if(t->item >= x) {
           t->left = Insert(t->left, x);
        return t;
    }
    else{
        t->right = Insert(t->right,x);
        return t;
    }
        
}

BST findmin(BST t){
    if(t == NULL){
        return NULL;
    }
    else{
        if(t->left == NULL){
            return t;
        }
        else{
            return findmin(t->left);
        }
    }
}

BST findmax(BST t){
    if(t==NULL){
        return NULL;
    }
    else{
        if(t->right == NULL){
            return t;
        }
        else{
            return findmax(t->right);
        }
    }
}


BST Delete(BST t, int x){
    BST tmpCell;

    if(t == NULL){
        cout<<"Cannot delete, bin. tree is empty !"<<endl;
        return NULL;
    }

    else{
        if(x < t->item){
            t->left = Delete(t->left,x);
        }
        else{
            if(x > t->item){
                t->right = Delete(t->right,x);
            }
            else{
                if(t->right && t->left){
                    tmpCell = findmin(t->right);
                    t->item= tmpCell->item;
                    t->right = Delete(t->right, tmpCell->item);
                }
                else{
                    tmpCell = t;
                    if(t->left == NULL){
                        t = t->right;
                    }
                    else if(t->right == NULL){
                        t = t->left;
                    }
                }
            }
        }

        free(tmpCell);
        cout<<"Value was deleted."<<endl;
    }

    return t;

}

void Preorder(BST t){

      if (t!=NULL){
        cout<<t->item<<endl;
        Preorder(t->left);        
        Preorder(t->right);
    }
    else{
        cout<<"Bin. tree is empty !"<<endl;
    }

}

void Inorder(BST t){

      if (t!=NULL){
        Inorder(t->left);
        cout<< t->item <<endl;        
        Inorder(t->right);
    }
    else{
        cout<<"Bin. tree is empty !"<<endl;
    }

}

void Postorder(BST t){

      if (t!=NULL){
        Postorder(t->left);        
        Postorder(t->right);
        cout<<t->item<<endl;
    }
    else{
        cout<<"Bin tree is empty !"<<endl;
    }

}

tStr getData(void){    
     cout << "Get data: ";
     tStr data;
     cin >> data;
     return data;
}
/*
void VypisSeznam(BST t){    

     tStr data;

     cout << "Obsah seznamu:";
     if (Empty(t)==true){
        cout<<" NULL"<<endl;
     }
     else{
        data = t->item;
        cout << data << ", ";
     }
}
*/

void Menu(void)//vypis menu
{
     cout << "\nGet number 0-7: \n\n";
     cout << "0: Inicialize\n";
     cout << "1: Insert\n";
     cout << "2: Search\n";
     cout << "3: Preorder\n";
     cout << "4: Inorder\n";
     cout << "5: Postorder\n";
     cout << "6: Delete\n";
     cout << "7: Delete tree\n";
     cout << "M: Menu\n";
     cout << "E: End\n";
}

int main(){
    Menu();

    char znak;
    BST strom;
    //tStr data;

    do {    
        cout << "\n\nGet char!";
        cin >> znak;
        
        switch (toupper(znak)) {          
               case '0' :  cout << "Inicialize - Initialization\n";
                           strom = Initialize(strom);
                           //VypisSeznam(strom);
                    break;
               case '1' :  cout << "Insert - insert a new node\n";
                           strom = Insert(strom, getData());
                           //VypisSeznam(strom);
                    break;
               case '2' :  cout << "Search - search node\n";
                           Search(strom, getData());
                           cout<<strom<<endl;
                    break;
               case '3' :  cout << "Preorder - preorder traversal\n";
                           Preorder(strom);
                    break;
               case '4' :  cout << "Inorder - inorder traversal\n";
                           Inorder(strom);
                    break;
               case '5' :  cout << "Postorder - postorder traversal\n";
                           Postorder(strom);
                    break;
               case '6' :  cout << "Delete - delete node\n";
                           Delete(strom, getData());
                    break;
               case '7' :  cout << "Delete Tree - delete tree\n";
                           DeleteTree(strom);
                    break;
               case 'M' : Menu();
                    break;
               case 'E' :
                    break;
               default : cout << "You get a wrong char!!!\n";
        }  
    } while (toupper(znak) != 'E');

    return 0;
}

Dieser Post wurde am 13.11.2005 um 12:33 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.11.2005, 11:59 Uhr
BoBtheREapER
kein job für nen BoB


i dunno whether you've noticed this but it's a german forum... amybe you should post in german.....
--
"Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir nicht ganz sicher." - Albert Einstein
www.blue-xenon.de.vu
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.11.2005, 00:06 Uhr
ao

(Operator)


@Bobthereaper:
I have the impression that Petr is from Eastern Europe, possibly he cannot write in German, so let's help him in English. Or, if you can, help him in Russian, or Polish or whatever his language is.

@Petr:
I haven't tested your program, just had a glance at the code, but Insert and Preorder seem OK to me. Preorder is called recursively, so if the tree is built correctly, there must be a NULL leaf at each end of a branch. And that's the point where you get "Bin tree is empty". Try using a debugger, and you will see this more clearly.

What problems are there when you delete things?

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: