這將是C語言中N元樹的整齊實現嗎?C中的N元樹C
格外,我想實現一個N叉樹,不能自行ballancing,帶着孩子的每個節點的綁定數,其中每個節點擁有一個已定義的結構,像這樣的例子:
struct task {
char command[MAX_LENGTH];
int required_time;
};
這將是C語言中N元樹的整齊實現嗎?C中的N元樹C
格外,我想實現一個N叉樹,不能自行ballancing,帶着孩子的每個節點的綁定數,其中每個節點擁有一個已定義的結構,像這樣的例子:
struct task {
char command[MAX_LENGTH];
int required_time;
};
在第一遍,你可以簡單地創建一個結構(姑且稱之爲樹節點),它持有任務,以及一組指針來樹節點秒。該集合可以是數組(如果N已修復)或鏈接列表(如果N是可變的)。鏈表需要你聲明的額外結構(讓我們把它叫做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;
};
任意n叉樹可以表示爲一個二叉樹,其中每個節點中的左指針指向第一個孩子和右指針指向下一哥哥。
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;
};
這種技術的優點是很多的算法更簡單寫,因爲他們可以在一個二叉樹,而不是更復雜的數據結構來表達。
作者:N-ary,你是指一個有扇出度N的樹?您必須指定更多,例如非自平衡搜索樹,trie樹,B樹等。 – ephemient 2008-10-10 01:59:12