2013-07-26 13 views
0

我已阅读关于链接列表和二叉树。我无法在任何地方找到的是一个n分支树。让我更加详细一点。当我们转到Windows操作系统的系统管理器时,我们找到了一个设备列表。通常可以点击一个设备在该设备下有另一个“子”列表。这些孩子也可能有自己的“孩子”名单(可能)。我在哪里可以找到这样的亲子n-tree程序示例/教程?在C语言中创建n分支树,找不到任何示例

我的意思是n-tree的意思是,它不只有2个brances。它可以在层次结构的任何级别具有任意数量的分支。

回答

4

对于固定数量的分支可以为每个节点分配做这样的事情

typedef struct _node_t 
{ 
    void *data; 
    struct _node_t *branch[50]; 
} node_t; 

OR

typedef struct _node_t 
{ 
    void *data; 
    struct _node_t **branch; 
} node_t; 

然后,分配在阵列中分支的数量。

node_t *node; 
node = malloc (sizeof (node_t)); 
node->branch = malloc (sizeof (node_t *) * number_of_branches_for_this_node); 
//Then 
node->branch[i]; //To access the branch. 

要确定分支数量的结束,你可能想存储分支的数量在那个特定的节点,或者存储在branch数组的最后一个位置空或其他的幻数。

另外需要注意的是,释放节点时,必须首先释放branch阵列,然后释放节点。

free (node->branch); 
free (node); 
+0

在这种情况下,我正在寻找很多分支机构。它应该在运行时决定,所以第二个选项看起来是正确的。有没有一些我可以详细阅读这些东西的文档?这些东西也被称为“树”吗? – quantum231

+0

是的,这是一棵树。如果在结构中没有循环,它就是一棵树,或者如果有'n'个节点,并且链接的数目是'n-1',那么它就是一棵树。链接的方向是隐含的。 – phoxis

+0

嗯,我期待着那样。问题在于,无论何时我用C语言搜索树,我都会得到足够的二叉树。所以我只是厌倦了,而是在这里发布了这个问题。 – quantum231