Добавление узлов в вектор правильных уровней класса Binary_treeC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Добавление узлов в вектор правильных уровней класса Binary_tree

Сообщение Anonymous »

Я пытаюсь создать реализацию класса Binary_tree . Сами узлы - бинарные_три. Каждый binary_tree имеет вектор *уровни , где каждый внутренний вектор представляет узлы уровня (поэтому у первого внутреннего вектора всегда есть 1 элемент, который является самим корнем. ) Каждый Binary_tree также имеет уровень QUIST_T *, который в основном является индексом уровня этого узла, поэтому основной корень всегда будет на уровне нуля, в то время как его прямые дети 1, но дети его детей 2 и так далее Полем Представьте себе дерево ниже: < /p>

Код: Выделить всё

     A
/   \
B     C
/ \   / \
D   E F   G
\       /
H     I
/
J
Уровень переменная для каждого узла зависит от их расстояния от A. Так что B равен 1, D - 2, а J - 4.
У меня есть функция, которая вызывается всякий раз, когда узел либо создается, либо добавляется, если создается, оба параметра одинаковы, но при добавлении первым узел - это узел, который должен быть обновлен его вектор уровней Второй параметр - это узел, который должен быть добавлен в вектор в правильном внутреннем векторе.
Я зашел так далеко: < /p>

Код: Выделить всё

        void updateLevels(Binary_Tree* tree, Binary_Tree *p) {
if (tree->levels->size() < *p->level+1) tree->levels->push_back(new vector());
tree->levels->at(*p->level)->push_back(p);
}
с одной стороны, он работает идеально, если дерево является , и причина в том, что переменная уровня зависит от . Но если Tree IS , например, b и p IS d , то есть d добавляется в b Уровни в индексе 1 (поскольку на уровнях b d должен быть во втором внутреннем векторе), он не работает.
Это логика, стоящая за добавлением узлов влево (addright похожа): < /p>
Binary_Tree *addLeft(T item) {
if (left) {
left->root = new T(item);
return left;
}
left = new Binary_Tree(item, this, false);
*left->level+=*level+1;
Binary_Tree *t = this;
while (t) {
++*t->size;
updateLevels(t, left);
updateLeaves(t, this, false);
t = t->parent;
}
return left;
}
< /code>
И это пример того, как я использую эту функцию: < /p>
tree->addLeft('B');
tree->left->addLeft('D');
< /code>
Таким образом, вы можете видеть, что каждая функция добавления вызывается из другого узла. < /p>
Я знаю, что мне нужно найти ритм, когда добавить Новый вектор (уровень) к вектору уровня дерева и где добавить узел в зависимости от дерева, но я не могу понять шаблон. Как я могу это сделать?

Подробнее здесь: https://stackoverflow.com/questions/794 ... tree-class
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»