ARGOMENTI: C, BST, PUNTATORI
Buongiorno a tutti,
qualcuno saprebbe dirmi perche' all'interno del metodo insert(root, val) il valore di n non viene sovrascritto? Per ognuno dei valori del vettore passato il programma entra sempre nel primo if decretando n vuoto. In teoria l'asseganzione n=l non funziona, avete consigli?
#include <stdio.h>
#include <stdlib.h>
// nlogn+n=nlogn
struct node{
int val;
struct node *left;
struct node *right;
};
void print(struct node *n){
if(n!=NULL){
print(n->left);
fprintf(stdout, "%d\n", n->val);
print(n->right);
}
}
void insert(struct node *n, int p){
struct node *l=malloc(sizeof(struct node));
l->val=p;
l->left=NULL;
l->right=NULL;
if (n==NULL){ //se albero vuoto
n=l;
fprintf(stdout, "%d\n", n->val);
}
else{
if(n->val > p){
if(n->left==NULL)
n->left=l;
insert(n->left, p);
}
else{
if(n->right == NULL)
n->right=l;
insert(n->right, p);
}
}
}
int main(){
struct node *n=NULL;
int a[16]={1,56,3,76,89,3,7,86,54,7,468,8,5,8,77,43};
for (int i=0; i<sizeof(a)/sizeof(int); i++)
insert(n, a);
fprintf(stdout, "%d\n pr", n);
print(n);
}