C, BST, PUNTATORI

di il
2 risposte

C, BST, PUNTATORI

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);
}

2 Risposte

  • Re: C, BST, PUNTATORI

    Usa il tag code per il codice.

    Qui
    
    if(n->val > p){
        if(n->left==NULL)
    	n->left=l;
        insert(n->left, p);
    } 
    
    Penso che serva un else prima di insert.
  • Re: C, BST, PUNTATORI

    Alla funzione stai passando una copia di n, non n.
Devi accedere o registrarti per scrivere nel forum
2 risposte