Код: Выделить всё
A
/ \
B C
/ \ / \
D E F G
\ /
H I
/
J
У меня есть функция, которая вызывается всякий раз, когда узел либо создается, либо добавляется, если создается, оба параметра одинаковы, но при добавлении первым узел - это узел, который должен быть обновлен его вектор уровней Второй параметр - это узел, который должен быть добавлен в вектор в правильном внутреннем векторе.
Я зашел так далеко: < /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);
}
Это логика, стоящая за добавлением узлов влево (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
Мобильная версия