用c实现要求实现一个二叉排序树,实现插入、后序遍历功能。树上每个节 点存储一个数字(int)。 题目要求程序读入一系列整数,按照命令构造二叉排序树,并进行 后序遍历。命令的格式如下: insert x:插入数字 x。 注意插入操作永远是往叶子结点插, 之前已经插入的结构不会再动 postorder:后序遍历,先访问左子树,然后访问右子树,最后 访问根节点。 这道题目要求实现以下结构体和函数: struct Node;二叉排序树节点,存储数字和指向左右子树的指针; Node *insert(Node *T, int x); void postorder(Node *T); 后序遍历
时间: 2023-05-19 12:02:04 浏览: 89
二叉排序树的实现与基本操作
以下是实现二叉排序树的代码:
#include <stdio.h>
#include <stdlib.h>
struct Node {
int val;
struct Node *left;
struct Node *right;
};
struct Node *insert(struct Node *T, int x) {
if (T == NULL) {
T = (struct Node *)malloc(sizeof(struct Node));
T->val = x;
T->left = NULL;
T->right = NULL;
} else if (x < T->val) {
T->left = insert(T->left, x);
} else if (x > T->val) {
T->right = insert(T->right, x);
}
return T;
}
void postorder(struct Node *T) {
if (T == NULL) {
return;
}
postorder(T->left);
postorder(T->right);
printf("%d ", T->val);
}
int main() {
struct Node *T = NULL;
char cmd[10];
int x;
while (scanf("%s", cmd) != EOF) {
if (cmd[0] == 'i') {
scanf("%d", &x);
T = insert(T, x);
} else if (cmd[0] == 'p') {
postorder(T);
printf("\n");
}
}
return 0;
}
在这个程序中,我们定义了一个结构体 Node,表示二叉排序树的节点。每个节点包含一个整数值 val,以及指向左右子树的指针 left 和 right。
我们还定义了两个函数 insert 和 postorder,分别用于插入节点和后序遍历二叉排序树。
在主函数中,我们不断读入命令,如果是 insert 命令,则读入一个整数 x 并插入到二叉排序树中;如果是 postorder 命令,则进行后序遍历并输出结果。
注意,我们使用了递归的方式实现插入和后序遍历。在插入节点时,如果当前节点为空,则创建一个新节点并返回;否则,根据节点值的大小递归地插入到左子树或右子树中。在后序遍历时,先递归遍历左子树,再递归遍历右子树,最后输出当前节点的值。
这个程序可以通过以下命令编译运行:
gcc -o bst bst.c
./bst
然后输入一系列命令,比如:
insert 5
insert 3
insert 7
postorder
输出结果应该为:
3 7 5
这表示后序遍历的结果为 3、7、5。
阅读全文