Member 10963756 Ответов: 2

Как я могу кодировать двоичное дерево со структурой.


Я хочу сортировать элементы в массиве по двоичному дереву. Я создал функцию insert (root, element_of_array). В функции insert он сравнивает значения узлов и решает перейти на левую или правую сторону, если узел равен нулю, он добавляет новый узел.

В чем разница между этими решениями ?

struct node{
    int value;
    struct node *r,*l;
};

  void insert(struct node *root,struct node *new_n){
       struct node *cr = root;
       //The first
       while(cr != NULL){
        if(cr->value > new_n->value){
            cr = cr->l;
        }else{
            cr = cr->r;
        }
       }
        cr = new_n;


        /*The second
        if(new_n->value < cr->value){
            if(cr->l == NULL)
                cr->l = new_n;
            else
                insert(cr->l,new_n);
        }
        if(new_n->value > cr->value){
            if(cr->r == NULL)
                cr->r = new_n;
            else
                insert(cr->r,new_n);
        }
        */

  }
  int main(){
          int i;
          struct node array[10];
          struct node *root=0;
          root = &array[0];
          srand(time(NULL));


          for(i=0;i<10;i++){
                  array[i].value = rand() % 100;
                  printf("prvok %d ma hodnotu :%d\n",i,array[i].value);
                  array[i].l = NULL;
                  array[i].r = NULL;
          }
          printf("++++++++++++++++++++++++++++++++++++++++++++++++\n");
          for(i=1;i<10;i++){
                  insert(root,&array[i]);
          }
          return 0;
  }


Что я уже пробовал:

Я попробовал измениться:
*КР = *new_n;
--------------------------------
cr = malloc(sizeof(struct node));
*КР = *new_n;

Graeme_Grant

Если это не домашнее задание, я бы рекомендовал вместо него QuickSort.

2 Ответов

Рейтинг:
0

Graeme_Grant

Google-ваш друг: бинарное дерево сортировки с[^]


Рейтинг:
0

Patrice T

Цитата:
В чем разница между этими решениями ?

Я вижу только 1 фрагмент кода.

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.