Как добавить с помощью функции Add(int) элемент в дерево, чтобы оно было сбалансированным? Сначала делал с помощью флажка f — поочередно налево, потом направо добавлялось. Но потом понял что при кол-ве элементов большим 7 неправильно работает.
class Element {
public:
int data;
Element* left;
Element* right;
Element();
Element(int);
};
void Tree::Add(int a) {
if(root == NULL) {
root = new Element(a);
return;
}
AddElement(root, a);
}
void Tree::AddElement(Element* p, int a) {
if (p->left == NULL) {
p->left = new Element(a);
return;
}
if (p->right == NULL) {
p->right = new Element(a);
return;
}
if (f) {
f=0;
AddElement(p->right, a);
} else {
f=1;
AddElement(p->left, a);
}
}