Утилизировать (бесплатно) целое двоичное дерево поиска - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь создать свой итеративный подход к удалению всего BST.

И я не получаю ожидаемого вывода после того, как вставляю узлы через свою функцию insert_nodes.

Это должно вывестичто-то вроде: влево, вправо, #nr #nr #nr для чисел 5,3,4

Я знаю, что это довольно легко сделать рекурсивно, но я хочу сделать это итеративно.Я совершенно запутался с указателями и свободными, потому что мне нужно освободить все узлы.

Я ценю любой тип помощи и объяснений.

struct node
{
  int value;
  node *left;
  node *right;
}node;

void disposeBST(*node root)

if (root == NULL)
    return;

  node *ptr = root;

  while (ptr != NULL )
  {
     if(ptr->right != NULL){
      printf("left");
      ptr= ptr->left;

    }
  if(ptr->right != NULL)
    {
      printf("right");
      ptr =ptr->right ;

    }
  }
  printf("#nr");
  free(root);
  ptr = 0;
  }

1 Ответ

0 голосов
/ 13 октября 2018

Основной способ сделать это:

disposeBST(node *root) {
    struct stack stack;
    stack_init(&stack);
    if (root) stack_push(&stack, root);
    while (!stack_empty(&stack)) {
        node *ptr = stack_pop(&stack);
        if (ptr->left) stack_push(&stack, ptr->left);
        if (ptr->right) stack_push(&stack, ptr->right);
        free(ptr);
    }
    stack_destroy(&stack);
}

реализация struct stack и связанных stack_ функций, оставленных в качестве упражнения для читателя ...

...