Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Abril7 en 12 Mayo 2017, 15:35 pm



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.

Código:
    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.