Viết binary tree rồi dùng duyệt tree in kết quả.
Mỗi node đại diện cho một ai, thuộc tính index
của node bằng giá trị i của ai
Với node lá, a1 dùng subclass A thay thế, a2 dùng subclass B thay thế.
Theo công thức: an = an-1 + an-2, thì node an cũng được tạo, với left(an) = an-1, và right(an) = an-2.
#include <iostream>
struct node {
node *left{nullptr};
node *right{nullptr};
int index{0};
node() {}
node(node* l, node* r): left{l}, right{r}, index{l->index + 1} {}
virtual ~node() {
if (index > 3) {
right = nullptr;
if (left) { delete left; left = nullptr; }
} else {
if (left) { delete left; left = nullptr; }
if (right) { delete right; right = nullptr; }
}
}
virtual void print() {
if (left) left->print();
if (right) right->print();
}
};
struct A : public node {
A() { index = 1; }
void print() override {
std::cout << 'A';
}
};
struct B : public node {
B() { index = 2; }
void print() override {
std::cout << 'B';
}
};
int main() {
int n;
std::cin >> n;
if (n < 1) { return 0; }
if (n == 1) { std::cout << "A\n"; return 0; }
if (n == 2) { std::cout << "B\n"; return 0; }
node *root = new node {new B, new A};
for (int i = 3; i < n; i++) {
node *temp = root;
root = new node {temp, temp->left};
}
root->print();
std::cout << std::endl;
delete root;
}