Título: Busqueda por posicion en arboles binarios c++
Publicado por: Abril7 en 12 Mayo 2017, 15:35 pm
Hola, Estoy teniendo problemas haciendo una funcion recursiva en arboles binarios, estoy intentando dar una posicion y que me retorne el valor que se encuentra en esa posicion, ya pasé demasiado tiempo intentandolo arreglar y no puedo, me deja de funcionar y así. Si alguien sabe que hago mal y me puede explicar, lo agradecería muchisimo. Gracias de antemano. struct node { int info; struct node *left; struct node *right; }*root;
class BST { public: void find(int, node **, node **); void insert(node *tree, node *newnode); void del(int); void case_a(node *,node *); void case_b(node *,node *); void case_c(node *,node *); void preorder(node *); void inorder(node *); void postorder(node *); void display(node *, int); void recupera(int pos); int countNodes(node *); int busquedaPos(node *ptr,int c,int pos); BST() { root = NULL; } };
int BST::busquedaPos(node *ptr,int c, int pos) { while(c != pos+1){ busquedaPos(ptr->left,c+1,pos); busquedaPos(ptr->right,c+1,pos); } return ptr->info; }
void BST::recupera(int pos) { int y = 1; if(root == NULL) { cout<<"\tEmpty tree."<<endl; } else if (pos==1){ cout<<"Your position is the root, so the value is: "<<root->info<<". "<<endl; } else if(pos>1 && pos <= (countNodes(root))) { bool found = false; while( y != pos && found != true){ cout<<"ok"<<endl; int plz = busquedaPos(root,y,pos); cout<<"ok2"<<endl; cout<<"Your value is: "<< plz <<endl; found = true; } } else if(pos > (countNodes(root)) or pos<0){ cout<<"\tError: The position that you are trying to use is invalid."<<endl; cout<<"\tThe list only have '"<<countNodes(root)<<"' elements. Try with one that is on range."<<endl; } }
Título: Re: Busqueda por posicion en arboles binarios c++
Publicado por: CalgaryCorpus en 12 Mayo 2017, 15:46 pm
En la funcion busquedaPos tienes un while, con una condicion. Cuando esa condicion se hace falsa?
Yo creo que nunca, porque parece que no estas modificando las variables que controlan el ciclo.
|