Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c语言中的多分支树_C_Data Structures_Tree - Fatal编程技术网

c语言中的多分支树

c语言中的多分支树,c,data-structures,tree,C,Data Structures,Tree,我想用c语言创建一个多分支树,你们能帮我吗 树结构: O /|\ / | \ O O O /|\ \ / | \ \ O O O O typedef struct node { struct node *left; struct node

我想用c语言创建一个多分支树,你们能帮我吗

树结构:

                  O
                 /|\
                / | \
               O  O  O
              /|\     \
             / | \     \
            O  O  O     O
typedef struct node {
    struct node *left;
    struct node *right;
    char *string;
} node;

下面是一个基本的树结构:

                  O
                 /|\
                / | \
               O  O  O
              /|\     \
             / | \     \
            O  O  O     O
typedef struct node {
    struct node *left;
    struct node *right;
    char *string;
} node;

您可以通过持有指向节点的指针数组(而不仅仅是左、右指针)轻松地将其扩展到更多分支,但效率不高

如果子节点的数量是固定的,或具有最大数量,则可以使用指针数组:

typedef struct node {
    struct nodes *childs[];
    char *string;
} node;
或者您可以动态分配它:

typedef struct node {
    struct nodes **childs;
    char *string;
} node;
这允许直接访问孩子。

另一种选择是使用链表来保存孩子。通过这种方式,您可以添加/删除任意数量的内容,但您将失去直接访问权。

最常见的方法是第一个子树/下一个兄弟树。它只使用2个指针来保存任意数量的子对象,这与链表不同

typedef struct node {
    struct node *child;
    struct node *next;
} node;

首先尝试使用简单树,然后扩展它以完成任务。每次节点的分支数是否相同?或者分支的数量会有所不同吗?您可能需要检查:和分支的数量在运行时会有所不同。