输入A(B(D(,G)),C(E,F))然后二叉链存储结构输出,C语言,给出代码
时间: 2024-12-12 08:32:52 浏览: 5
C语言程序设计-给出百分制成绩,要求输出成绩等级A、B、C、D、E。90分以上为A,80~89分为B,7
5星 · 资源好评率100%
在C语言中,我们可以使用链表数据结构来表示这样的嵌套结构。这里是一个简单的递归示例,用于创建一个二叉树,并将其转换为链表表示。我们将假设输入是一个字符串,每个字符代表节点的值,花括号`{}`表示左孩子,逗号`,`表示右孩子。注意,这个例子不会处理错误情况,比如非法输入。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
char value;
struct Node* left;
struct Node* right;
} TreeNode;
// 创建新节点
TreeNode* createNode(char value) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->value = value;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 插入节点到树
void insertNode(TreeNode** root, char value) {
if (*root == NULL) {
*root = createNode(value);
} else if (value < (*root)->value) {
insertNode(&(*root)->left, value);
} else {
insertNode(&(*root)->right, value);
}
}
// 将树转为链表(中序遍历)
void treeToLinkedList(TreeNode* root, TreeNode** head) {
if (root != NULL) {
treeToLinkedList(root->left, head);
*head = root; // 将当前节点插入链表
treeToLinkedList(root->right, head);
}
}
int main() {
char input[] = "A(B(D,G),C(E,F))";
TreeNode* root = NULL;
for (char c : input) {
if (c != '(' && c != ')' && c != ',' && c != ')') {
insertNode(&root, c);
}
}
TreeNode* listHead = NULL;
treeToLinkedList(root, &listHead);
printf("Linked List Output: ");
while (listHead != NULL) {
printf("%c", listHead->value);
listHead = listHead->right; // 遍历至下一个节点
}
printf("\n");
return 0;
}
```
在这个代码中,我们首先解析输入字符串并构建二叉树,然后通过中序遍历来构造链表。运行此程序将输出链表的形式:
```bash
Linked List Output: A->B->D->G->C->E->F
```
阅读全文