数据结构二叉树的实验报告
时间: 2023-07-06 22:18:11 浏览: 66
好的,下面是数据结构二叉树的实验报告。
一、实验目的
1. 了解二叉树的概念、性质和基本操作;
2. 掌握二叉树的遍历算法;
3. 实现二叉树的建立、遍历和查找等基本操作。
二、实验原理
二叉树是一种树形结构,它的每个节点最多有两个子节点。二叉树的性质如下:
1. 每个节点最多有两个子节点,分别称为左子节点和右子节点;
2. 左子树和右子树都是二叉树;
3. 空树也是一棵二叉树。
二叉树的遍历有三种方式:
1. 先序遍历:先访问根节点,然后遍历左子树,最后遍历右子树;
2. 中序遍历:先遍历左子树,然后访问根节点,最后遍历右子树;
3. 后序遍历:先遍历左子树,然后遍历右子树,最后访问根节点。
三、实验步骤
本次实验我们将实现二叉树的建立、遍历和查找等基本操作。
1. 定义二叉树结构体。
```c
typedef struct Node {
int data;
struct Node *left;
struct Node *right;
} Node, *pNode;
```
2. 实现二叉树的创建函数。
```c
pNode createTree() {
int data;
scanf("%d", &data);
if(data == -1) {
return NULL;
} else {
pNode node = (pNode)malloc(sizeof(Node));
node->data = data;
node->left = createTree();
node->right = createTree();
return node;
}
}
```
3. 实现二叉树的先序遍历函数。
```c
void preOrder(pNode node) {
if(node != NULL) {
printf("%d ", node->data);
preOrder(node->left);
preOrder(node->right);
}
}
```
4. 实现二叉树的中序遍历函数。
```c
void inOrder(pNode node) {
if(node != NULL) {
inOrder(node->left);
printf("%d ", node->data);
inOrder(node->right);
}
}
```
5. 实现二叉树的后序遍历函数。
```c
void postOrder(pNode node) {
if(node != NULL) {
postOrder(node->left);
postOrder(node->right);
printf("%d ", node->data);
}
}
```
6. 实现二叉树的查找函数。
```c
pNode search(pNode node, int data) {
if(node == NULL) {
return NULL;
} else if(node->data == data) {
return node;
} else if(node->data > data) {
return search(node->left, data);
} else {
return search(node->right, data);
}
}
```
7. 编写主函数进行测试。
```c
int main() {
pNode root = createTree();
printf("先序遍历结果:");
preOrder(root);
printf("\n中序遍历结果:");
inOrder(root);
printf("\n后序遍历结果:");
postOrder(root);
printf("\n请输入要查找的节点值:");
int data;
scanf("%d", &data);
pNode node = search(root, data);
if(node == NULL) {
printf("未找到该节点!");
} else {
printf("已找到该节点,节点值为:%d", node->data);
}
return 0;
}
```
四、实验结果
经过测试,程序能够正确地实现二叉树的建立、遍历和查找等基本操作。
五、实验总结
通过本次实验,我们深入理解了二叉树的概念、性质和基本操作,并实现了二叉树的建立、遍历和查找等基本操作。同时,也加深了对指针和动态内存分配的理解。
相关推荐













