用c语言编写一个建立如下图所示二叉树的程序,并分别按照前序遍历二叉树次序、中序遍历二叉树次序和后序遍历二叉树次序输出显示二叉树各结点的信息。
时间: 2023-12-10 08:33:28 浏览: 93
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结构体
typedef struct TreeNode {
char data; // 数据域
struct TreeNode *left; // 左子树指针
struct TreeNode *right; // 右子树指针
} TreeNode, *TreeNodePtr;
// 创建二叉树
TreeNodePtr createTree() {
char data;
scanf("%c", &data);
if (data == '#') { // 如果输入#,则表示该节点为空
return NULL;
}
TreeNodePtr node = (TreeNodePtr)malloc(sizeof(TreeNode)); // 申请节点空间
node->data = data; // 节点数据域赋值
node->left = createTree(); // 递归创建左子树
node->right = createTree(); // 递归创建右子树
return node;
}
// 前序遍历
void preOrder(TreeNodePtr root) {
if (root == NULL) {
return;
}
printf("%c ", root->data); // 输出节点数据
preOrder(root->left); // 递归遍历左子树
preOrder(root->right); // 递归遍历右子树
}
// 中序遍历
void inOrder(TreeNodePtr root) {
if (root == NULL) {
return;
}
inOrder(root->left); // 递归遍历左子树
printf("%c ", root->data); // 输出节点数据
inOrder(root->right); // 递归遍历右子树
}
// 后序遍历
void postOrder(TreeNodePtr root) {
if (root == NULL) {
return;
}
postOrder(root->left); // 递归遍历左子树
postOrder(root->right); // 递归遍历右子树
printf("%c ", root->data); // 输出节点数据
}
int main() {
printf("请按照前序遍历的顺序输入二叉树的节点信息,空节点用#表示:\n");
TreeNodePtr root = createTree(); // 创建二叉树
printf("前序遍历结果为:");
preOrder(root); // 前序遍历
printf("\n中序遍历结果为:");
inOrder(root); // 中序遍历
printf("\n后序遍历结果为:");
postOrder(root); // 后序遍历
return 0;
}
```
--相关问题--:
1. 如何判断一棵二叉树是否为完全二叉树?
2. 如何求
阅读全文