用c语言设计一个程序实现如下功能: 1)根据先序序列创建对应的二叉树链表(虚节点用0表示); 2)能够输出上述二叉树对应的广义表表示的形式; 3)能够对二叉树进行先序遍历,输出先序遍历得到的字母排列; 4)能够对二叉树进行中序遍历,输出中序遍历得到的字母排列; 5)能够对二叉树进行后序遍历,输出后序遍历得到的字母排列。
时间: 2023-06-04 18:03:01 浏览: 97
好的,我可以回答你关于 C 语言设计二叉树程序的问题。以下是程序实现:
```
#include<stdio.h>
#include<stdlib.h>
typedef struct node {
char data;
struct node *left;
struct node *right;
} Node;
Node* create_tree() {
Node *p;
char ch;
scanf("%c", &ch);
if (ch == '0') {
p = NULL;
} else {
p = (Node*)malloc(sizeof(Node));
p -> data = ch;
p -> left = create_tree();
p -> right = create_tree();
}
return p;
}
void print_generalized_list(Node *root) {
if (root) {
printf("%c", root->data);
if (root->left || root->right) {
printf("(");
print_generalized_list(root->left);
printf(",");
print_generalized_list(root->right);
printf(")");
}
} else {
printf("0");
}
}
void pre_order_traversal(Node *root) {
if (root != NULL) {
printf("%c", root->data);
pre_order_traversal(root->left);
pre_order_traversal(root->right);
}
}
void in_order_traversal(Node *root) {
if (root != NULL) {
in_order_traversal(root->left);
printf("%c", root->data);
in_order_traversal(root->right);
}
}
void post_order_traversal(Node *root) {
if (root != NULL) {
post_order_traversal(root->left);
post_order_traversal(root->right);
printf("%c", root->data);
}
}
int main() {
Node *root;
printf("输入先序序列(#表示空节点):");
root = create_tree();
printf("广义表表示:");
print_generalized_list(root);
printf("\n先序遍历得到的字母排列:");
pre_order_traversal(root);
printf("\n中序遍历得到的字母排列:");
in_order_traversal(root);
printf("\n后序遍历得到的字母排列:");
post_order_traversal(root);
printf("\n");
return 0;
}
```
这个程序实现了先序序列创建二叉树,输出二叉树的广义表表示,以及对二叉树进行先序、中序、后序遍历,输出对应的字母排列。
阅读全文