Problema Bst

di il
5 risposte

Problema Bst

Salve a tutti ho un problema con l'inserimento dei valori in un bst.Infatti quando vado a stamparli a run time mi da un errore di stack overflow.
Questo è il codice che ho scritto:
Source:
#include "tree.h"
#include <iostream>
#include <stdlib.h>


using namespace std;

bst::bst(){
	head=NULL;
}
void bst::distruggi(nodo* p){
	if(p!=NULL){
		distruggi(p->dx);
		distruggi(p->sx);
	delete p;
	}
}

bst::~bst(){
	distruggi(head);
}
bst::bst(const bst &a1){
	head=copia(a1.head);
}
nodo* bst::copia(nodo* p){
	   if(p==NULL)
        return NULL;
    else
    {
        nodo *app = new nodo;
        app->val = p->val;
        app->sx = copia(p->sx);
        app->dx = copia(p->dx);
        
        return app;
    }
}

void bst::insert(int info){
	head=put_o(head,info);
}
nodo* bst::put_o(nodo *p,int info){
	if(p==NULL){
		nodo *aux=new nodo;
		aux->val=info;
		aux->h=0;
		aux->dx=NULL;
		aux->sx=NULL;
		p=aux;}
	
	else{
		if(p->val<info){
			p->dx=put_o(p->dx,info);}
		else{
			p->sx=put_o(p->sx,info);}
		
	}
	return p;
}

void bst::visita(nodo *p){
	visita(p->sx);
	cout<<p->val;
	cout<<p->h;
	visita(p->dx);
}
void bst::stampa(){
	visita(head);
}
ed HEADER:
#ifndef TREE_H
#define	TREE_H
struct nodo{
	int val;
	int h;
	nodo *sx,*dx;
};

class bst{
protected:
	nodo *head;
	nodo* put_o(nodo *p,int info);
	void distruggi(nodo* p);
	void calc_h(nodo* p,int a);
	void visita(nodo* p);
	nodo* copia(nodo* p);
public:
	bst();
	~bst();
	bst(const bst &a1);
	void insert(int info);
	void stampa();
	void altezza();
};


#endif

5 Risposte

  • Re: Problema Bst

    Tu ci capisci qualcosa? Io no.
    Sai che esistono i tag code e che hai espresso di aver letto il regolamento cosa che non hai fatto?
  • Re: Problema Bst

    void bst::visita(nodo *p){
       visita(p->sx);
       cout<<p->val;
       cout<<p->h;
       visita(p->dx);
       return;
    }
    Quand'è che si ferma la funzione visita?
  • Re: Problema Bst

    Ho provato anche omettendo il return,ma la funzione non stampa neanche un valore e si blocca subito.Penso che il problema sia nel put che non riesce a collegare la radice con i nodi figli in fase di creazione.Ma non capisco il perchè...
  • Re: Problema Bst

    Che ne dici di fare meglio la funzione visita.
        void bst::visita(nodo *p){
            if(p)
            {
                cout<<p->val << " - ";
                cout<<p->h << endl;
                visita(p->sx);
                visita(p->dx);
            }
        }
    Così com'era andava all'infinito e quindi in crash.
  • Re: Problema Bst

    Ora funziona.Grazie mille!
Devi accedere o registrarti per scrivere nel forum
5 risposte