Problem ze stworzeniem drzewa BST

0

Funkcja createTree działa poprawnie, ale przy warunku "if(*a < ((n)->v))" w funkcji addNode jest coś nie tak i poza korzeniem nic ta funkcja nie potrafi dodac :( Oświeci mnie ktoś?

#include <stdio.h>
#include <stdlib.h>

typedef struct node{
       int v;
       struct node* left ;
       struct node* right;
       }node;

node* root = NULL;

void createTree(int a){
     root = (node*)malloc(sizeof(node));
     root->v = a;
     root->left = root->right = NULL;
     }
     
void addNode(node** n, int a){
     if((*n) == NULL){
           node* n = (node*)malloc(sizeof(node));
           n->v = a;
           n->left = n->right = NULL;
          }
     else
         if(a < ((*n)->v))
              addNode(&(*n)->left, a);
         else
             addNode(&(*n)->right, a);
     }
     
     
void preorder(node** r){
     if((*r) != NULL){
          printf("%d\n",(*r)->v);
          preorder(&(*r)->left);
          preorder(&(*r)->right);        
          }
     }

int main()
{
  int i;
  createTree(8);
  for(i = 0; i<100; i++)
        addNode(&root, i);
  preorder(&root);
  getch();
  return 0;
}
0

Warunek jest poprawny. Niepoprawnie jest w main, nie rozumiem po kiego na dzień dobry dodajesz do drzewa jakiś węzeł?
zamiast: createTree(8);
powinno być: root=NULL;
Powinieneś też zdawać sobie sprawę że przy dodaniu wartości posortowanych (i bez równoważenia) jak u ciebie w pętli drzewo przekształca się w listę jednokierunkową.

1 użytkowników online, w tym zalogowanych: 0, gości: 1