编一个程序,读入用户输入的一串先序遍历字符串,根据输入建立一棵二叉树, 输出二叉树的层次遍历序列。每个结点先输出一个空格,然后再跟着输出结点的数据。用C++实现
时间: 2024-05-14 07:19:34 浏览: 193
二叉树的功能实现,用c++实现的。
好的,以下是用 C 实现的代码:
```
#include <stdio.h>
#include <stdlib.h>
// 二叉树结构体
typedef struct node{
char data; // 数据
struct node *left; // 左子树指针
struct node *right; // 右子树指针
} TreeNode;
// 新建一个节点
TreeNode* createNode(char data) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 根据先序遍历序列创建二叉树
TreeNode* createTree(char* preorder, int* index) {
if (preorder[*index] == '\0') {
return NULL;
}
TreeNode* root = createNode(preorder[*index]);
(*index)++;
root->left = createTree(preorder, index);
(*index)++;
root->right = createTree(preorder, index);
return root;
}
// 层次遍历
void levelOrder(TreeNode* root) {
if (root == NULL) {
return;
}
TreeNode* queue[1000];
int front = 0, rear = 0;
queue[rear++] = root;
while (front != rear) {
int size = rear - front;
for (int i = 0; i < size; i++) {
TreeNode* node = queue[front++];
printf(" %c", node->data);
if (node->left != NULL) {
queue[rear++] = node->left;
}
if (node->right != NULL) {
queue[rear++] = node->right;
}
}
}
}
int main() {
char preorder[1000];
printf("请输入先序遍历序列:");
scanf("%s", preorder);
int index = 0;
TreeNode* root = createTree(preorder, &index);
printf("层次遍历序列为:");
levelOrder(root);
return 0;
}
```
注意事项:
- 代码中使用的队列为数组实现,需要预设一个很大的数组,可能会有内存浪费,实际项目中建议使用链表队列。
- 输入的先序遍历序列中每个节点之间需要空格分隔。
- 如果输入的序列有误(比如节点数与二叉树不符合),可能会导致程序崩溃。
阅读全文