用C语言实现以下:输入字符序列,建立并输出一棵二叉树,分别按先序,中序,后序遍历输出二叉树
时间: 2024-05-01 11:21:30 浏览: 101
下面是用C语言实现输入字符序列,建立二叉树,以及先序,中序,后序遍历输出二叉树的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树节点结构体
typedef struct TreeNode {
char data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建一个新的节点
TreeNode* createNode(char data) {
TreeNode* node = (TreeNode*) malloc(sizeof(TreeNode));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
// 建立二叉树
TreeNode* buildTree() {
char c;
scanf("%c", &c);
if (c == '#') {
return NULL;
} else {
TreeNode* node = createNode(c);
node->left = buildTree();
node->right = buildTree();
return node;
}
}
// 先序遍历
void preOrder(TreeNode* root) {
if (root != NULL) {
printf("%c ", root->data);
preOrder(root->left);
preOrder(root->right);
}
}
// 中序遍历
void inOrder(TreeNode* root) {
if (root != NULL) {
inOrder(root->left);
printf("%c ", root->data);
inOrder(root->right);
}
}
// 后序遍历
void postOrder(TreeNode* root) {
if (root != NULL) {
postOrder(root->left);
postOrder(root->right);
printf("%c ", root->data);
}
}
int main() {
printf("请输入字符序列建立二叉树,'#'表示空节点:\n");
TreeNode* root = buildTree();
printf("先序遍历结果:");
preOrder(root);
printf("\n中序遍历结果:");
inOrder(root);
printf("\n后序遍历结果:");
postOrder(root);
printf("\n");
return 0;
}
```
这里我们使用了递归来建立二叉树和遍历二叉树。输入字符序列时,'#'代表空节点;先序遍历的顺序是:先遍历根节点,再遍历左子树,最后遍历右子树;中序遍历的顺序是:先遍历左子树,再遍历根节点,最后遍历右子树;后序遍历的顺序是:先遍历左子树,再遍历右子树,最后遍历根节点。
阅读全文