drzewo binarne

0

Cześć, kod do main jest na podstawie książki, więc pewnie main jest źle tylko jak zrobić, żeby było dobrze i dlaczego tak? Z góry dzięki za pomoc.

#include <iostream>
using namespace std;

struct wezel{
    int WartGlowy;
    wezel *lewy;
    wezel *prawy;
};

wezel *wstaw(wezel *drzewo, int wart){
    if(drzewo==NULL){
        wezel* NoweDrzewo=new wezel;
        NoweDrzewo->lewy=NULL;
        NoweDrzewo->prawy=NULL;
        return NoweDrzewo;
    }
    if(wart< drzewo->WartGlowy)
        drzewo->lewy=wstaw(drzewo->lewy,wart);
    else if(wart> drzewo->WartGlowy)
        drzewo->prawy=wstaw(drzewo->prawy,wart);
return drzewo;
};

wezel *szukaj(wezel *drzewo, int wart){
    if(drzewo==NULL)
        return NULL;
    else if(drzewo->WartGlowy==wart)
        return drzewo;
    else if(wart< drzewo->WartGlowy)
        return szukaj(drzewo->lewy,wart);
    else if(wart> drzewo->WartGlowy)
        return szukaj(drzewo->prawy,wart);
};

void ZniszczDrzewo(wezel *drzewo){
    if(drzewo!=NULL){
        ZniszczDrzewo(drzewo->lewy);
        ZniszczDrzewo(drzewo->prawy);
        delete drzewo;
    }
};


int main(){
    wezel *drzewo;
    int a,b,x;
    cout<<"1.wstaw \n2.szukaj \n3.zniszcz \n4.koniec \n";

    do{
            cin>>x;
            if(x==1){
                cout<<"wstaw do drzewa liczbe: ";
                cin>>a;
                wstaw(drzewo,a);
                cout<<endl;
            }
            else if(x==2){
                cout<<"szukaj w dzrzewie liczby: ";
                cin>>b;
                szukaj(drzewo,b);
            }
            else if(x==3)
                ZniszczDrzewo(drzewo);
    }while(x!=4);
};
0

*wpiszę 1 następnie wpisze coś - zawiesza się
*wpiszę 2 (tak samo jak przy jedynce)
*wpisze 3 - zawiesza się
*wpisze 4 - kończy czyli jest ok

1

Przejechałeś to debugerem?

0

W funkcji wstaw() sprawdzasz czy (drzewo==NULL), za pierwszym razem nie jest NULL.

0

Taki kod działa, to i Twój powinien być OK;

#include <iostream>

struct BinTree {
	int val;
	BinTree * left;
	BinTree * right;
};

BinTree * add(BinTree * tree, int elem) {
	if (nullptr == tree) {
		BinTree * newTree = new BinTree;
		newTree->val = elem;
		return newTree;
	}
	if (elem < tree->val) 
		tree->left = add(tree->left, elem);
	else if (elem > tree->val)
		tree->right = add(tree->right, elem);
	else
		return tree;
}
int main () {
	BinTree *t;
	t = add(t, 42);
	t = add(t, 11);
	std::cout << t->val << "\n"; // -> 42
	std::cout << t->left->val << "\n"; // -> 11
	return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1