C语言中N-ary树的整洁实现是什么?
特别是,我想实现一个n-ary树,而不是自我平衡,每个节点中有一个未绑定数量的子节点,其中每个节点都包含一个已定义的结构,例如:
struct task {
char command[MAX_LENGTH];
int required_time;
};
答案 0 :(得分:52)
任何n-ary树都可以表示为二叉树,其中每个节点中左指针指向第一个子节点,右指针指向下一个兄弟。
R R / | \ | B C D B -- C -- D / \ | | | E F G E -- F G
所以,你的情况是:
struct task {
char command[MAX_LENGTH];
int required_time;
};
struct node {
struct task taskinfo;
struct node *firstchild;
struct node *nextsibling;
};
这种技术的优点是许多算法编写起来比较简单,因为它们可以在二叉树上表示,而不是在更复杂的数据结构上表示。
答案 1 :(得分:13)
作为第一遍,你可以简单地创建一个 struct (我们称之为 TreeNode ),它包含任务,以及指向 TreeNode 的指针集。此集可以是数组(如果 N 已修复)或链接列表(如果 N 是可变的)。链接列表要求您使用 TreeNode 指向实际子节点的一部分声明一个额外的 struct (让我们称之为 ListNode )树),以及指向列表中下一个 ListNode 的指针(如果在列表的末尾,则为 null )。
它可能看起来像这样:
struct task {
char command[MAX_LENGTH];
int required_time;
};
struct TreeNode;
struct ListNode {
struct TreeNode * child;
struct ListNode * next;
};
struct TreeNode {
struct task myTask;
struct ListNode myChildList;
};