用c语言通过输入数据,建立一个排序二叉树;每输入一个数据重新显示二叉树的结构。 2.输入完毕后,对排序二叉树进行中序遍历,给出排序结果。
时间: 2024-02-12 09:03:28 浏览: 64
好的,让我来帮助您解决这个问题。
首先,我们需要定义一个二叉树节点的结构体,包含节点的值、左子树和右子树指针:
```c
typedef struct node {
int value;
struct node* left;
struct node* right;
} Node;
```
接下来,我们可以编写一个函数,用于向二叉树中插入节点。该函数将递归地检查节点应该位于左子树还是右子树,并在适当的位置插入新节点。
```c
Node* insert(Node* root, int value) {
if (root == NULL) {
// 如果根节点为空,创建一个新节点
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->value = value;
new_node->left = NULL;
new_node->right = NULL;
return new_node;
}
if (value < root->value) {
// 如果插入值小于根节点的值,插入到左子树
root->left = insert(root->left, value);
} else {
// 如果插入值大于等于根节点的值,插入到右子树
root->right = insert(root->right, value);
}
return root;
}
```
要显示二叉树的结构,我们可以编写一个函数,用于递归地打印二叉树。该函数将打印根节点的值,然后递归地打印左子树和右子树。
```c
void print_tree(Node* root) {
if (root == NULL) {
return;
}
printf("%d(", root->value);
print_tree(root->left);
printf(",");
print_tree(root->right);
printf(")");
}
```
最后,我们可以编写一个函数,用于中序遍历二叉树并打印排序结果。该函数将递归地遍历左子树、打印根节点的值,然后递归地遍历右子树。
```c
void inorder_traversal(Node* root) {
if (root == NULL) {
return;
}
inorder_traversal(root->left);
printf("%d ", root->value);
inorder_traversal(root->right);
}
```
现在,我们可以将所有这些函数组合在一起,编写一个程序,该程序将等待用户输入数字,并将它们插入排序二叉树中。每次插入后,程序将显示二叉树的结构。当用户输入完成后,程序将执行中序遍历并打印排序结果。
```c
int main() {
Node* root = NULL;
int value;
while (scanf("%d", &value) != EOF) {
root = insert(root, value);
print_tree(root);
printf("\n");
}
inorder_traversal(root);
printf("\n");
return 0;
}
```
这个程序应该可以满足您的需求。如果您有任何问题,请随时问我。
阅读全文