




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/* 调试环境VS2008、VC+6.0 */*关于二叉树的一些操作,包括二叉树的建立,输出,遍历*/*判断是否为完全二叉树,求二叉树的层数,求叶子结点数*/#include #include #include #define MAX(x,y) (x)(y)?(x):(y)typedef struct BiTNodeint data;struct BiTNode *lchild,*rchild;BiTNode,*BiTree;BiTree CreateBiTree(BiTree T) / 按先序次序输入二叉树中结点的值(int类型) /构造二叉链表表示的二叉树T,结点值为int型,表示空(子)树int num;scanf(%d,&num);if(0 = num) / 空T=NULL; else T=(BiTree)malloc(sizeof(BiTNode);if(!T)exit(0);T-data = num; / 生成根结点printf(请输入结点%d的左子结点: ,T-data);T-lchild = CreateBiTree(T-lchild); / 构造左子树printf(请输入结点%d的右子结点: ,T-data);T-rchild = CreateBiTree(T-rchild); / 构造右子树 return T;void PrintBiTree(BiTree T) /先序遍历输出二叉树,其中NULL表示空结点 /输出其嵌套括号表示格,即形如A(T1,T2),其中A为根结点,T1,T2分别为A的左子树和右子树if(T != NULL)printf(%d,T-data); /若结点非空,输出结点的值if(T-lchild != NULL | T-rchild != NULL)printf();PrintBiTree(T-lchild); /判断左子树,非空则输出根结点的值printf(,);if(T-rchild != NULL)PrintBiTree(T-rchild); /判断右子树,非空则输出根结点的值else printf(NULL);printf();elseprintf(NULL);int FullBiTree(BiTree T) /判断二叉树是否为完全二叉树,完全二叉树需满足两个条件 /一是某结点缺失左或右孩子,则其后续结点均无孩子结点 /二是某结点无左孩子,则一定无右孩子 /需按层次遍历二叉树,故设一队列,用queue表示该队列 /用bj表示是否所以结点均有左孩子和右孩子,若是bj=1,否则bj=0BiTree queue50,p;int first = 0,rear = 0,cm = 1,bj = 1;if(T != NULL)queue+rear = T; /根结点入队while(first != rear)p = queue+first; /p按入队先后顺序依次指向队列中的结点if(p-lchild = NULL)bj = 0;/p的左孩子为空,bj=0if(p-rchild != NULL) /p的左孩子为空,右孩子却不为空,不可能是完全二叉树了cm = 0; break;elsecm = bj;if(!cm)break;queue+rear = p-lchild; /p的左孩子不为空,入队if(p-rchild = NULL) /p的左孩子非空,右孩子空,则其左孩子必须无后续结点bj = 0; /否则不可能为完全二叉树elsequeue+rear = p-rchild;/p的右孩子非空,入队return cm; return 1;void preorder(BiTree T) /先序遍历二叉树并输出if(T != NULL)printf(%d,T-data);preorder(T-lchild);preorder(T-rchild);void inorder(BiTree T) /中序遍历二叉树并输出if(T != NULL)preorder(T-lchild);printf(%d,T-data);preorder(T-rchild);void postorder(BiTree T) /后序遍历二叉树并输出if(T != NULL)preorder(T-lchild);preorder(T-rchild);printf(%d,T-data);void layorder(BiTree T) /按层次遍历二叉树,利用队列先进先出性质即可int head=0,tail=0;BiTree queue50,p;p = T;if(p != NULL)queuetail+ = p; while(head != tail)if(p-lchild != NULL)queuetail+ = p-lchild;if(p-rchild != NULL)queuetail+ = p-rchild;printf(%d,p-data);p = queue+head;int leaf_num(BiTree T) /计算叶子结点数,并输出叶子结点 /f(T)=0,如果T=NULL /f(T)=1,如果T-lchild=T-rchild=NULL /f(T)=f(T-lchild)+f(T-rchild),其他情况int num1,num2;if(T = NULL)return 0;else if(T-lchild = NULL & T-rchild = NULL)printf( 结点%d,T-data);return 1;elsenum1 = leaf_num(T-lchild);num2 = leaf_num(T-rchild);return (num1+num2);int layer_num(BiTree T) /f(T)=0,如果T=NULL /f(T)=1,如果T-lchild=T-rchild=NULL /f(T)=maxf(T-lchild)+1,f(T-rchild)+1,其他情况int num1,num2;if(T = NULL)return 0;else if(T-lchild = NULL & T-rchild = NULL)return 1;elsenum1 = layer_num(T-lchild)+1;num2 = layer_num(T-rchild)+1;return MAX(num1,num2);int main(void)int k;BiTree T=NULL;printf(n建立二叉树n请输入树的根结点:);T = CreateBiTree(T);printf(n输出二叉树:n);PrintBiTree(T);if(FullBiTree(T)printf(nn这是一棵完全二叉树);elseprintf(nn这不是一棵完全二叉树);printf(nn先序遍历二叉树:); preorder(T);printf(nn中序遍历二叉树:); inorder(T);printf(nn后序遍历二叉树:); postorder(T);printf(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江农林大学暨阳学院《德语文学选读》2023-2024学年第一学期期末试卷
- 华中科技大学《篮球3》2023-2024学年第二学期期末试卷
- 铁岭师范高等专科学校《嵌入式系统设计C(实验)》2023-2024学年第二学期期末试卷
- 板材沙发改造方案范本
- 蚌埠铸铁泄水管施工方案
- 2025至2031年中国大提琴琴弓行业投资前景及策略咨询研究报告
- 车辆报废拆解方案范本
- 广西壮族自治区柳州市铁一中学2024-2025学年高二3月月考语文试题(原卷版)
- 山东抽风罩施工方案
- 2025农业合作社土地租赁合同范本
- 2025年四川省国有资产经营投资管理有限责任公司招聘笔试参考题库附带答案详解
- 基于国内外文献对银发网红崛起、影响与发展的综述探讨
- 2025年国家公务员考试公共基础知识题库400题及答案
- 2024年09月四川浙江民泰商业银行成都分行支行行长社会招考笔试历年参考题库附带答案详解
- 民法典学习笔记本与重点法条解读-笔记
- 幼儿园大班美术欣赏《大师画牛》课件
- 《主动脉夹层疾病》课件
- 课题申报书:乡村振兴和教育现代化背景下农村教育发展战略研究
- 中国妊娠期糖尿病母儿共同管理指南(2024版)解读
- 建筑工程材料题库+参考答案
- DB21T 2724-2017 辽宁省河湖(库)健康评价导则
评论
0/150
提交评论