He hecho una función para inserción en BST utilizando bucles y está funcionando perfectamente bien. Ahora, cuando iam escribo para hacerlo utilizando la recursividad, no sé por qué no funciona correctamente, sin embargo, la lógica es correcta según yo. Parece que no se está agregando ningún nodo nuevo al árbol BST y que el encabezado del árbol después de salir de la función de inserción vuelve a ser NULO.Inserción recursiva de BST
#include <iostream>
using namespace std;
class node{
public:
int data;
node *right;
node *left;
node(){
data=0;
right=NULL;
left=NULL;
}
};
class tree{
node *head;
int maxheight;
void delete_tree(node *root);
public:
tree(){head=0;maxheight=-1;}
void pre_display(node* root);
node* get_head(){return head;}
void insert(int key,node* current);
};
void tree::insert(int key,node *current){
if(current==NULL)
{
node *newnode=new node;
newnode->data=key;
current=newnode;
}
else{
if(key<current->data)
insert(key,current->left);
else
insert(key,current->right);
}
return;
}
void tree::pre_display(node *root){
if(root!=NULL)
{
cout<<root->data<<" ";
pre_display(root->left);
pre_display(root->right);
}
}
int main(){
tree BST;
int arr[9]={17,9,23,5,11,21,27,20,22},i=0;
for(i=0;i<9;i++)
BST.insert(arr[i],BST.get_head());
BST.pre_display(BST.get_head());
cout<<endl;
system("pause");
return 0;
}
Por favor dime qué debería cambiar en el algoritmo para que funcione.
Pero iam puntero de cabeza el envío de la principal, y por lo tanto la corriente será el mismo que la cabeza en la primera instancia de la recursividad. – Zohaib
Está pasando un nodo * por valor. Si lo pasa por referencia BST :: head se actualizará correctamente –
Pero quiero mantener la cabeza de BST privada. – Zohaib