C语言创建链式存储的二叉树,用户输入字符串,程序按照先序遍历的顺序遍历字符串并建立对应结构的二叉树
时间: 2024-11-30 21:14:42 浏览: 2
数据结构-二叉树的建立与遍历 (2).docx
在C语言中,我们可以使用结构体来表示二叉树节点,并通过指针连接它们形成链式存储。首先,定义一个`Node`结构体,包含字符、左孩子和右孩子的指针:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
char data;
struct Node* left;
struct Node* right;
} Node;
```
接下来,我们创建函数来插入新节点(根据先序遍历顺序),然后构建整个二叉树:
1. 插入函数 `insertPreorder`:
```c
void insertPreorder(Node** root, char value) {
if (*root == NULL) {
*root = (Node*)malloc(sizeof(Node));
(*root)->data = value;
(*root)->left = (*root)->right = NULL;
} else if (value <= (*root)->data) {
insertPreorder(&((*root)->left), value);
} else {
insertPreorder(&((*root)->right), value);
}
}
```
2. 用户输入并构建二叉树:
```c
int main() {
Node* root = NULL;
char input[100];
printf("Enter a sequence of characters for the binary tree (end with 'end'):\n");
while (fgets(input, sizeof(input), stdin)) {
if (strcmp(input, "end") != 0) {
insertPreorder(&root, input[0]);
} else {
break;
}
}
// 先序遍历打印结果
inorderTraversal(root);
return 0;
}
void inorderTraversal(Node* node) {
if (node != NULL) {
inorderTraversal(node->left);
printf("%c ", node->data);
inorderTraversal(node->right);
}
}
```
在这个例子中,用户输入一个字符序列,每次遇到字符都会递归地插入到相应的位置。当输入"end"时停止,然后调用`inorderTraversal`函数按照先序遍历的方式显示整个二叉树。
阅读全文