Реализация двоичного дерева с использованием массива - PullRequest
0 голосов
/ 22 апреля 2019

в HW меня попросили реализовать двоичное дерево, используя указатели, а затем используя реализацию массива bt.Проблема в том, что, хотя я знаю, как это сделать, они должны использовать один и тот же основной файл.Под этим я подразумеваю тот же самый код, который я использовал для реализации указателей, должен использоваться реализацией массива.Это означает, что когда я ссылаюсь на insertTree (дерево, дерево -> слева), он должен работать и для массива. Я полностью потерян.Мой узел:

    Typedef  struct BTNode{
     itemtype data;
      Struct BTNode * left;
     Struct BTNode * left;
    }BTNode;

1 Ответ

1 голос
/ 22 апреля 2019

В «стандартном» случае новая ячейка поддерживается результатом malloc , и когда она становится бесполезной, вы освобождаете это

Использование массива может иметь массив BTNode и вместо malloc новую ячейку, в которую вы получаете свободную запись в массиве. Поскольку ячейки могут быть получены / освобождены априори в любом порядке, вы также можете связать свободные ячейки, поэтому, когда ячейка освобождается, она снова вводится в свободный список, связанный с массивом

Таким образом, необходимо изменить только вызовы malloc / free , чтобы использовать массив или нет


Примечание:

Typedef  struct BTNode{
     itemtype data;
      Struct BTNode * left;
     Struct BTNode * left;
    }BTNode;

вы имеете в виду

typedef  struct BTNode{
   itemtype data;
   struct BTNode * left;
   struct BTNode * right;
} BTNode;
...