Порядок элементов в идеально сбалансированном дереве

Мне трудно представить, как моя программа будет вставлять элементы.
Вот код, который дал нам учитель:

int arr[] = { 3, -2, 11, 7, 12, 1, 4, 5, 33, 13 };
int n = 10;
int cnt = 0;

typedef struct node*po;

struct node {
int data;
po left;
po right;
};

po ibd(int n) {
po holder;
if (n>0) {
int nl = n / 2;
int nr = n - nl - 1;
holder = new node;
holder->data = arr[cnt++];
holder->left = ibd(nl);
holder->right = ibd(nr);
return holder;
}
else {
return NULL;
}
}

К сожалению, я не могу понять и представить, как он помещает элементы в дерево. Из того, что я могу понять, он использует рекурсивный алгоритм «разделяй и властвуй» для разделения массива на две части и добавления элементов, однако я не могу понять, какой элемент становится корневым. Может ли кто-нибудь помочь мне представить, как будет выглядеть дерево после того, как все будет вставлено?

0

Решение

При работе с деревьями мне нравится рисовать узел примерно так:

+--------------+---------------+
|            Data              |
+--------------+---------------+
|  Pointer to  |   Pointer to  |
| left subtree | right subtree |
+--------------+---------------+

Когда я делаю один узел, указывающий на другой, я использую стрелки из соответствующего left или же right указатель на новый узел. Это помогает мне визуализировать дерево.

Есть много ресурсов, которые показывают, как рисовать деревья.

Как только дерево нарисовано, следуйте стрелкам при добавлении нового узла.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]