使用C语言编写一串代码:输入字符序列,建立二叉树;按先序、中序、后序遍历二叉树(三种递归算法和中序遍历的非递归算法);按某种形式输出二叉树;
时间: 2024-03-03 09:49:11 浏览: 123
好的,请看下面的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
char data;
struct node *left;
struct node *right;
} Node;
// 先序遍历
void preorder(Node *root) {
if (root == NULL) {
return;
}
printf("%c ", root->data);
preorder(root->left);
preorder(root->right);
}
// 中序遍历
void inorder(Node *root) {
if (root == NULL) {
return;
}
inorder(root->left);
printf("%c ", root->data);
inorder(root->right);
}
// 后序遍历
void postorder(Node *root) {
if (root == NULL) {
return;
}
postorder(root->left);
postorder(root->right);
printf("%c ", root->data);
}
// 中序遍历的非递归算法
void inorder_non_recursive(Node *root) {
Node *stack[100];
int top = -1;
Node *p = root;
while (p != NULL || top != -1) {
while (p != NULL) {
stack[++top] = p;
p = p->left;
}
if (top != -1) {
p = stack[top--];
printf("%c ", p->data);
p = p->right;
}
}
}
// 输出二叉树
void print_tree(Node *root, int level) {
if (root == NULL) {
return;
}
print_tree(root->right, level + 1);
for (int i = 0; i < level; i++) {
printf(" ");
}
printf("%c\n", root->data);
print_tree(root->left, level + 1);
}
// 建立二叉树
Node *build_tree() {
char ch;
scanf("%c", &ch);
if (ch == '#') {
return NULL;
}
Node *root = (Node *)malloc(sizeof(Node));
root->data = ch;
root->left = build_tree();
root->right = build_tree();
return root;
}
int main() {
printf("请输入字符序列(使用#代表空节点):\n");
Node *root = build_tree();
printf("先序遍历:");
preorder(root);
printf("\n中序遍历:");
inorder(root);
printf("\n后序遍历:");
postorder(root);
printf("\n中序遍历(非递归):");
inorder_non_recursive(root);
printf("\n输出二叉树:\n");
print_tree(root, 0);
return 0;
}
```
这段代码可以实现输入字符序列,建立二叉树;按先序、中序、后序遍历二叉树(三种递归算法和中序遍历的非递归算法);按某种形式输出二叉树。如果您有任何疑问,请随时问我。
阅读全文
相关推荐















