用C语言编写1.从键盘读入字符(数字、字母或其他符号)建立一个深度不小于3层的树的孩子兄弟表存储结构,然后①分别递归先根、后根遍历该树并输出相应遍历树结点序列。
时间: 2023-06-16 08:06:23 浏览: 53
以下是用C语言编写的代码,实现从键盘读入字符,建立一个深度不小于3层的树的孩子兄弟表存储结构,并递归先根、后根遍历该树并输出相应遍历树节点序列。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_CHILDREN 10
typedef struct TreeNode {
char data;
struct TreeNode *firstChild;
struct TreeNode *nextSibling;
} TreeNode;
TreeNode *createNode(char data) {
TreeNode *node = (TreeNode *) malloc(sizeof(TreeNode));
node->data = data;
node->firstChild = NULL;
node->nextSibling = NULL;
return node;
}
void addChild(TreeNode *parent, TreeNode *child) {
if (parent->firstChild == NULL) {
parent->firstChild = child;
} else {
TreeNode *sibling = parent->firstChild;
while (sibling->nextSibling != NULL) {
sibling = sibling->nextSibling;
}
sibling->nextSibling = child;
}
}
void createTree(TreeNode *root, int depth) {
if (depth <= 0) {
return;
}
char data;
printf("Enter data for node at depth %d: ", depth);
scanf(" %c", &data);
TreeNode *node = createNode(data);
addChild(root, node);
createTree(node, depth - 1);
}
void preOrder(TreeNode *node) {
if (node == NULL) {
return;
}
printf("%c ", node->data);
preOrder(node->firstChild);
preOrder(node->nextSibling);
}
void postOrder(TreeNode *node) {
if (node == NULL) {
return;
}
postOrder(node->firstChild);
printf("%c ", node->data);
postOrder(node->nextSibling);
}
int main() {
TreeNode *root = createNode('\0');
createTree(root, 3);
printf("Pre-order traversal: ");
preOrder(root->firstChild);
printf("\n");
printf("Post-order traversal: ");
postOrder(root->firstChild);
printf("\n");
return 0;
}
```
在这个程序中,我们首先定义了一个TreeNode结构体来表示树节点。每个节点包含一个字符数据,以及指向其第一个孩子和下一个兄弟节点的指针。然后我们定义了一些辅助函数来创建节点、添加孩子节点以及递归构建树。在主函数中,我们创建了一个根节点,然后调用createTree函数来构建树。最后,我们使用preOrder和postOrder函数来递归遍历树并输出节点序列。
阅读全文