《数据结构》实验五:树和二叉树 实验(实验报告)

一.实验目的

     巩固树和二叉树的相关知识,特别是二叉树的相关内容。学会运用灵活应用。

1.回树和二叉树的逻辑结构和存储方法,清楚掌握树和二叉树的遍历操作。

2.学习树的相关知识来解决实际问题。

3.进一步巩固程序调试方法。

4.进一步巩固模板程序设计。

二.实验时间

   准备时间为第10周到第12前半周,具体集中实验时间为12周周四。2个学时。

三.实验内容

1.自己设计一个二叉树,深度最少为4,请递归算法分别用前序、中序、后序遍历输出树结点。

2.写程序判定出六枚硬币中的一枚假硬币。参照课本P136页8枚硬币的判定方法。

3.自己确定2n(大小自己确定)个同学参加学校羽毛球淘汰比赛,请定程序,存放各队员比赛结果,并根据结果确定冠亚军。

 第一题是必做题,第二题和第三题选做题。选做并做对者每题奖励5分。

四.参考资料

    实验教材P207到218

  • 6
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一个二叉树的创建和遍历的C语言代码实现,供您参考: ```c #include <stdio.h> #include <stdlib.h> // 二叉树结构体定义 struct Node { int data; struct Node* left; struct Node* right; }; // 创建二叉树 struct Node* createBinaryTree() { struct Node* root = NULL; int data; printf("请输入节点的值(输入-1表示该节点为空):"); scanf("%d", &data); if (data == -1) { return NULL; } else { root = (struct Node*)malloc(sizeof(struct Node)); root->data = data; printf("请输入%d的左子节点:\n", data); root->left = createBinaryTree(); printf("请输入%d的右子节点:\n", data); root->right = createBinaryTree(); } return root; } // 先序遍历 void preOrder(struct Node* root) { if (root == NULL) { return; } printf("%d ", root->data); preOrder(root->left); preOrder(root->right); } // 中序遍历 void inOrder(struct Node* root) { if (root == NULL) { return; } inOrder(root->left); printf("%d ", root->data); inOrder(root->right); } // 后序遍历 void postOrder(struct Node* root) { if (root == NULL) { return; } postOrder(root->left); postOrder(root->right); printf("%d ", root->data); } int main() { struct Node* root = NULL; root = createBinaryTree(); printf("先序遍历结果:\n"); preOrder(root); printf("\n中序遍历结果:\n"); inOrder(root); printf("\n后序遍历结果:\n"); postOrder(root); return 0; } ``` 这个程序实现了二叉树的创建和三种遍历方式(先序、中序、后序),具体实现方法如下: - 创建二叉树:通过递归的方式,从根节点开始输入节点的值,如果输入的值为-1,则表示该节点为空,返回NULL;否则,创建一个新的节点,将其值赋为输入的值,然后递归调用该函数,创建左子节点和右子节点,并将它们分别赋值给该节点的左右指针。 - 先序遍历:先输出当前节点的值,然后递归遍历左子和右子。 - 中序遍历:先递归遍历左子,然后输出当前节点的值,最后递归遍历右子。 - 后序遍历:先递归遍历左子和右子,最后输出当前节点的值。 当程序运行时,会提示用户输入每个节点的值,然后输出三种遍历方式的结果。注意,这个程序没有进行内存释放,实际使用时需要注意内存泄漏问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值