用c语言写一个关于数据结构二叉树的程序要求包括输入二叉树,前序遍历二叉树,中序遍历二叉树,后序遍历二叉树,层次遍历二叉树等功能且要求有菜单
时间: 2023-11-14 19:17:04 浏览: 120
好的,以下是一个简单的关于数据结构二叉树的程序,包括输入二叉树,前序遍历二叉树,中序遍历二叉树,后序遍历二叉树,层次遍历二叉树等功能,并且有菜单供用户选择。
```c
#include <stdio.h>
#include <stdlib.h>
//定义二叉树结构体
typedef struct tree_node{
int data;
struct tree_node *left;
struct tree_node *right;
}tree_node;
//创建树节点
tree_node* create_node(int data){
tree_node *node = (tree_node*)malloc(sizeof(tree_node));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
//插入节点到二叉树
tree_node* insert_node(tree_node *root, int data){
if(root == NULL){
root = create_node(data);
}else if(data <= root->data){
root->left = insert_node(root->left, data);
}else{
root->right = insert_node(root->right, data);
}
return root;
}
//前序遍历二叉树
void preorder_tree(tree_node *root){
if(root == NULL)
return;
printf("%d ", root->data);
preorder_tree(root->left);
preorder_tree(root->right);
}
//中序遍历二叉树
void inorder_tree(tree_node *root){
if(root == NULL)
return;
inorder_tree(root->left);
printf("%d ", root->data);
inorder_tree(root->right);
}
//后序遍历二叉树
void postorder_tree(tree_node *root){
if(root == NULL)
return;
postorder_tree(root->left);
postorder_tree(root->right);
printf("%d ", root->data);
}
//获取树的高度
int get_height(tree_node *root){
if(root == NULL)
return -1;
int left_height = get_height(root->left);
int right_height = get_height(root->right);
if(left_height > right_height)
return left_height + 1;
else
return right_height + 1;
}
//按层次遍历二叉树
void level_order_tree(tree_node *root){
if(root == NULL)
return;
int height = get_height(root);
int i;
for(i = 0; i <= height; i++){
print_level(root, i);
}
}
//按层次打印二叉树
void print_level(tree_node *root, int level){
if(root == NULL)
return;
if(level == 0){
printf("%d ", root->data);
}else{
print_level(root->left, level - 1);
print_level(root->right, level - 1);
}
}
int main(){
tree_node *root = NULL;
int choice, data;
do{
printf("\n1. 插入节点");
printf("\n2. 前序遍历");
printf("\n3. 中序遍历");
printf("\n4. 后序遍历");
printf("\n5. 层次遍历");
printf("\n0. 退出");
printf("\n请输入你的选择:");
scanf("%d", &choice);
switch(choice){
case 0:
break;
case 1:
printf("\n请输入节点值:");
scanf("%d", &data);
root = insert_node(root, data);
break;
case 2:
printf("\n前序遍历结果:");
preorder_tree(root);
break;
case 3:
printf("\n中序遍历结果:");
inorder_tree(root);
break;
case 4:
printf("\n后序遍历结果:");
postorder_tree(root);
break;
case 5:
printf("\n层次遍历结果:");
level_order_tree(root);
break;
default:
printf("\n请输入正确的选择!");
break;
}
}while(choice != 0);
return 0;
}
```
在程序中,我们定义了一个二叉树节点的结构体,并定义了一些函数来实现不同的功能。在主函数中,我们使用了一个 do-while 循环来让用户选择操作,用户可以选择插入节点、前序遍历、中序遍历、后序遍历、层次遍历或退出程序。根据用户的选择,程序会调用相应的函数来实现相应的功能。
以上是一个简单的关于数据结构二叉树的程序,仅供参考。
阅读全文
相关推荐













