это вопрос типа структуры данных. У меня проблема с деревом. Я хочу взять данные от пользователя, скажем его имя. "DAN" теперь я хочу сделать дерево для этого с корневым узлом, имеющим трех детей. У меня есть дерево с тремя детьми.
как я реализую его со связанным списком. потому что в бинарном древовидном списке есть двое детей.
но здесь у меня три. Простой в том, что у меня есть корневой узел с тремя детьми
root
/ | \
/ | \
ch1 ch2 ch3
Простой, вы создаете структуру с тремя указателями для детей:
struct TreeNode
{
int data;
TreeNode *children[3];
};
Кроме того, вы можете превратить детей в связанный список, так что любой данный узел имеет прямой указатель на его первый ребенок, а также его первый родной брат:
struct TreeNode
{
int data;
TreeNode *firstChild;
TreeNode *nextSibling;
};
// To iterate through the children of a node:
TreeNode *child = root->firstChild;
while (child != NULL)
{
// Do stuff with child
...
child = child->nextSibling;
}
Это легче распространяется на любое количество детей, но при доступе к данным у него более высокие показатели производительности. Поэтому, если вы знаете, что у каждого узла будет не более 3 детей, лучше использовать фиксированный массив дочерних указателей, чтобы улучшить время доступа и улучшить локальность кэша.
struct TreeNode
(как в предыдущем редактировании