数据结构第四次作业(二叉树的基本操作实现)
来源:互联网 发布:邢山虎 知乎 编辑:程序博客网 时间:2024/06/05 04:16
实验题目: 二叉树的基本操作实现
实验目的:掌握二叉树的二叉链存储结构及表示。
掌握二叉树的三种遍历算法(递归和非递归两类)。
运用三种遍历的方法求解二叉树的有关问题。
实验内容:实现二叉树的二叉链表存储结构;
实现先序、中序和后序遍历二叉树;
遍历二叉树的应用:计算叶子结点、左右子树交换等。
要求:1、二叉树基本操作已实现,学习和进一步理解。
2 、在求总结点的程序中加入求叶子结点的功能。
3 、左右子树交换,按中序和后序是否也可以?
4 、选作:按层遍历二叉树。
以后字符输入还是用 c++ 输吧,用 c 总会产生莫名的搞怪
#include<stdio.h>#include<malloc.h>#include<string.h>#include<stdlib.h>#include<iostream>#define MAXTSIZE 1000using namespace std;/* 测试数据: abc##de#g##f###*/typedef struct BiTNode{char data; // 结点数据域 struct BiTNode *lchild,*rchild; // 左右孩子指针 }BiTNode,*BiTree;void CreateBiTree(BiTree &T) // 先序遍历建立二叉链表 {char ch;cin>>ch;//scanf("%c",&ch);if(ch=='#')T=NULL;else{T=(BiTNode *)malloc(sizeof(BiTNode));T->data=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild);}}void travel1(BiTree T) // 先序遍历 {if(T){printf("%c",T->data);travel1(T->lchild);travel1(T->rchild);}}void travel2(BiTree T) // 中序遍历 {if(T){travel2(T->lchild);printf("%c",T->data);travel2(T->rchild);}}void travel3(BiTree T) // 后序遍历 {if(T){travel3(T->lchild);travel3(T->rchild);printf("%c",T->data);}}int count(BiTree T) // 计算叶子结点的个数 {if(T==NULL)return 0;int cnt=0;if((!T->lchild)&&(!T->rchild)){cnt++;}int leftcnt=count(T->lchild);int rightcnt=count(T->rchild);cnt+=leftcnt+rightcnt;return cnt;}int Depth(BiTree T) // 计算二叉树的深度 {if(T==NULL)return 0;else{int m=Depth(T->lchild);int n=Depth(T->rchild);return m>n?(m+1):(n+1);}}void exchange(BiTree T,BiTree &NewT) // 交换左右子树 {if(T==NULL){NewT=NULL;return ;}else{NewT=(BiTNode *)malloc(sizeof(BiTNode));NewT->data=T->data;exchange(T->lchild,NewT->rchild); // 复制原树的左子树给新树的右子树 exchange(T->rchild,NewT->lchild); // 复制原树的右子树给新树的左子树 }}int main(){puts("**************************");puts("1. 建立二叉树"); puts("2. 先序遍历二叉树");puts("3. 中序遍历二叉树");puts("4. 后序遍历二叉树");puts("5. 计算叶子结点个数"); puts("6. 计算二叉树的深度"); puts("7. 交换二叉树的左右子树"); puts("0. 退出");puts("**************************");BiTree Tree,NewTree;int choose;while(~scanf("%d",&choose),choose){switch(choose){case 1:puts("温馨提醒:输入请以 '#' 为左/右子树空的标志!"); CreateBiTree(Tree);break;case 2:printf("先序遍历结果为:"); travel1(Tree);puts("");break;case 3:printf("中序遍历结果为:"); travel2(Tree);puts("");break;case 4:printf("后序遍历结果为:"); travel3(Tree);puts("");break;case 5:printf("叶子结点个数为:%d\n",count(Tree));break;case 6:printf("二叉树的深度为:%d\n",Depth(Tree));break;case 7:exchange(Tree,NewTree);Tree=NewTree;puts("交换成功!\n"); break;}}system("pause");return 0;}
0 0
- 数据结构第四次作业(二叉树的基本操作实现)
- 数据结构第五次作业(图的基本操作实现)
- [数据结构]第四次作业:二叉数的各种算法
- C语言数据结构实现二叉树递归与非递归遍历(数据结构第四次实验)
- (数据结构)二叉树的基本操作
- 数据结构-第四次作业-behind
- 【数据结构】二叉树基本操作的程序实现
- 数据结构.二叉树的基本操作(C语言实现)
- 数据结构:二叉树的基本操作(JAVA实现)
- 数据结构 — 二叉树的基本操作(递归实现)
- 数据结构 — 二叉树的基本操作实现(递归算法)
- 第7次数据结构上机--树和二叉树的基本运算实现
- 第四次的作业
- 数据结构之二叉树的基本操作
- 【数据结构】二叉树的基本操作
- 【数据结构笔记】二叉树的基本操作
- 数据结构-二叉树的基本操作
- 数据结构->二叉树的基本操作
- 5.导航条、分页导航
- Flume 安装, 测试
- mac修改mysql密码
- FindBugs 插件使用
- ActiveMQ的启动和配置介绍
- 数据结构第四次作业(二叉树的基本操作实现)
- 树和二叉树
- 引用和指针的区别
- iOS视频播放的四种方案
- 智力游戏
- POJ 2437 贪心+priority_queue
- DOM对象与JQuery对象
- postgresql 中的外键
- JqueryUI-datepicker 时间段控制在30天