Задание на фото. Так же приводился код бинарного дерева, как пример, с чьего помощью мне нужно было реализовать данную схему. Нашел похожее задание, с таким же деревом тут: h tt ps ://w w w .cyberforum.ru/cpp-beginners/thread2275947.html
Но все равно, как бы не пытался - не могу разобраться как оно работает. 3 первых элемента выводились как надо, остальные - вообще не понятно как...

#include <iostream>
#include <string>
using namespace std;
template<typename Right>
struct NodeList {
Right data;
NodeList* nxt;
NodeList() : nxt(nullptr) {}
};
template<typename Type, typename Right>
struct NodeDoubleList {
Type data;
NodeDoubleList* nxt;
NodeList<Right>* right;
NodeDoubleList() : nxt(nullptr), right(nullptr) {}
};
template<typename Type, typename Right>
class DoubleList {
public:
DoubleList() : lhead(nullptr), ltail(nullptr), rhead(nullptr), rtail(nullptr) {}
void add(const Type& ldata, const Right& rdata) {
auto lptr = new NodeDoubleList<Type, Right>;
lptr->data = ldata;
auto rptr = new NodeList<Right>;
rptr->data = rdata;
if (!lhead) {
rhead = rptr;
rtail = rhead;
lhead = lptr;
ltail = lhead;
} else {
rtail->nxt = rptr;
ltail->nxt = lptr;
rtail = rtail->nxt;
ltail = ltail->nxt;
}
rtail->nxt = nullptr;
ltail->nxt = nullptr;
ltail->right = rtail;
}
void show()const {
auto beg = lhead;
while (beg != ltail->nxt) {
cout << beg->data << ". " << beg->right->data << '\n';
beg = beg->nxt;
}
}
private:
NodeDoubleList<Type, Right>* lhead;
NodeDoubleList<Type, Right>* ltail;
NodeList<Right>* rhead;
NodeList<Right>* rtail;
};
int main() {
DoubleList<int, string> dl;
int key1 = 1;
string value1 = "first";
dl.add(key1, value1);
int key2 = 2;
string value2 = "second";
dl.add(key2, value2);
int key3 = 3;
string value3 = "third";
dl.add(key3, value3);
dl.show();
system("pause > nul");
}
P.S. Общая архитектура такова, дальнейшая реализация членов класса DoubleList за вами. Удачи вам!
А зачем такая именно задача нужна?
Есть внятное объяснение и применение, или так, от нечего делать процессор погонять?