C语言#define MAX_TREENODE_NUM 100 // "孩子链表表示法" 中二叉树的最大节点个数 // "孩子链表表示法" 中孩子链表节点结构体类型定义 typedef struct ChildNode { int Child; // 孩子节点的位置(索引号) struct ChildNode *Next; // 指向下一个孩子的指针 }ChildNode; // "孩子链表表示法" 中二叉树节点结构体类型定义 typedef struct DataNode { char Data; // 二叉树中节点的数据类型 struct ChildNode *FirstChild; // 指向二叉树中节点的第一个孩子的指针 }DataNode; // "孩子链表表示法" 中二叉树结构体类型定义 typedef struct ChildTree { DataNode Nodes[ MAX_TREENODE_NUM ]; // 二叉树的"孩子链表表示法" int Root; // 树根节点的游标 - 静态指针值 int TreeNodeNum // 二叉树中实际的节点数目 }ChildTree; 要求完成如下设计并编写代码、调试通过: (1)设计函数将二叉树以“孩子链表表示法”输入到计算机中(自定义输入数据的格式和方式)
时间: 2023-12-06 10:45:09 浏览: 88
描述c语言的数据结构中的二叉树
以下是将二叉树以“孩子链表表示法”输入到计算机中的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_TREENODE_NUM 100 // "孩子链表表示法" 中二叉树的最大节点个数
// "孩子链表表示法" 中孩子链表节点结构体类型定义
typedef struct ChildNode {
int Child; // 孩子节点的位置(索引号)
struct ChildNode *Next; // 指向下一个孩子的指针
} ChildNode;
// "孩子链表表示法" 中二叉树节点结构体类型定义
typedef struct DataNode {
char Data; // 二叉树中节点的数据类型
struct ChildNode *FirstChild; // 指向二叉树中节点的第一个孩子的指针
} DataNode;
// "孩子链表表示法" 中二叉树结构体类型定义
typedef struct ChildTree {
DataNode Nodes[MAX_TREENODE_NUM]; // 二叉树的"孩子链表表示法"
int Root; // 树根节点的游标 - 静态指针值
int TreeNodeNum; // 二叉树中实际的节点数目
} ChildTree;
// 创建孩子链表节点
ChildNode *CreateChildNode(int child) {
ChildNode *node = (ChildNode *) malloc(sizeof(ChildNode));
node->Child = child;
node->Next = NULL;
return node;
}
// 插入孩子链表节点
void InsertChildNode(ChildNode **first, int child) {
ChildNode *node = CreateChildNode(child);
node->Next = *first;
*first = node;
}
// 输入二叉树
void InputChildTree(ChildTree *tree) {
printf("请输入二叉树的节点数:\n");
scanf("%d", &tree->TreeNodeNum);
getchar(); // 处理缓存
printf("请输入二叉树的根节点:\n");
scanf("%d", &tree->Root);
getchar(); // 处理缓存
printf("请输入二叉树的节点信息,格式为:parent child1 child2 ...\n");
for (int i = 0; i < tree->TreeNodeNum; i++) {
char input[100];
fgets(input, 100, stdin);
char *token = strtok(input, " ");
int parent = atoi(token);
token = strtok(NULL, " ");
while (token != NULL) {
int child = atoi(token);
InsertChildNode(&tree->Nodes[parent].FirstChild, child);
token = strtok(NULL, " ");
}
}
}
int main() {
ChildTree tree;
InputChildTree(&tree);
return 0;
}
```
以上代码中,`InputChildTree` 函数负责读取二叉树的输入信息,包括节点数、根节点和每个节点的孩子。在读取孩子信息时,使用 `strtok` 函数分割输入信息,将孩子节点插入到相应父节点的孩子链表中。
阅读全文