2008-10-10 62 views
12

這將是C語言中N元樹的整齊實現嗎?C中的N元樹C

格外,我想實現一個N叉樹,不能自行ballancing,帶着孩子的每個節點的綁定數,其中每個節點擁有一個已定義的結構,像這樣的例子:

struct task { 
    char command[MAX_LENGTH]; 
    int required_time; 
}; 
+0

作者:N-ary,你是指一個有扇出度N的樹?您必須指定更多,例如非自平衡搜索樹,trie樹,B樹等。 – ephemient 2008-10-10 01:59:12

回答

12

在第一遍,你可以簡單地創建一個結構(姑且稱之爲樹節點),它持有任務,以及一組指針來樹節點秒。該集合可以是數組(如果N已修復)或鏈接列表(如果N是可變的)。鏈表需要你聲明的額外結構(讓我們把它叫做ListNode)與樹節點指向實際的孩子(樹的一部分),並在列表中的指針指向下一個ListNodenull如果在列表的末尾)。

它可能是這個樣子:

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; 
}; 
48

任意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; 
}; 

這種技術的優點是很多的算法更簡單寫,因爲他們可以在一個二叉樹,而不是更復雜的數據結構來表達。