写一篇数据结构关于二叉树应用的实验报告要求用C语言写出代码
实验题目:二叉树的建立、遍历和删除
实验目的:通过本实验,学生应掌握二叉树的建立、遍历和删除操作,加深对数据结构的理解。
实验原理:二叉树是一种特殊的树结构,每个节点最多只有两个子节点。通过递归方式进行构建和遍历。
实验步骤:
-
建立二叉树
二叉树的建立可以通过递归方式进行,对于每个节点,先输入该节点的值,然后递归构建左子树和右子树。代码如下:
typedef struct Node
{
int value;
struct Node *left;
struct Node *right;
} Node;
Node *create_tree()
{
int value;
scanf("%d", &value);
if (value == -1)
return NULL;
Node *new_node = (Node *)malloc(sizeof(Node));
new_node->value = value;
new_node->left = create_tree();
new_node->right = create_tree();
return new_node;
}
-
二叉树的遍历
二叉树的遍历有三种方式:前序遍历、中序遍历和后序遍历。其中前序遍历指的是先访问根节点,再访问左子树和右子树;中序遍历指的是先访问左子树,再访问根节点和右子树;后序遍历指的是先访问左子树和右子树,再访问根节点。代码如下:
void preorder_traversal(Node *root)
{
if (root == NULL)
return;
printf("%d ", root->value);
preorder_traversal(root->left);
preorder_traversal(root->right);
}
void inorder_traversal(Node *root)
{
if (root == NULL)
return;
inorder_traversal(root->left);
printf("%d ", root->value);
inorder_traversal(root->right);
}
void postorder_traversal(Node *root)
{
if (root == NULL)
return;
postorder_traversal(root->left);
postorder_traversal(root->right);
printf("%d ", root->value);
}
-
二叉树的删除
二叉树的删除操作需要注意几点:先删除左子树和右子树,再删除根节点;如果左子树或右子树为空,则直接删除该节点。代码如下:
void delete_tree(Node *root)
{
if (root == NULL)
return;
delete_tree(root->left);
delete_tree(root->right);
free(root);
}
实验结果:
输入样例:1 2 4 -1 -1 5 -1 -1 3 -1 6 7 -1 -1 -1
输出样例:
前序遍历:1 2 4 5 3 6 7 中序遍历:4 2 5 1 3 6 7 后序遍历:4 5 2 7 6 3 1
实验结论:
通过本实验,我掌握了二叉树的建立、遍历和删除操作。在实际应用中,二叉树可以用来解决很多问题,如排序、查找等
原文地址: https://www.cveoy.top/t/topic/ffrF 著作权归作者所有。请勿转载和采集!