二叉树排序设计说明书
- 格式:doc
- 大小:196.00 KB
- 文档页数:39
内蒙古科技大学本科生课程设计说明书题目:数据结构课程设计——二叉树的遍历和应用学生姓名:学号:专业:班级:指导教师:2013年5月29日内蒙古科技大学课程设计说明书内蒙古科技大学课程设计任务书I内蒙古科技大学课程设计说明书目录内蒙古科技大学课程设计任务书..............................................................错误!未定义书签。
目录 (II)第一章需求分析 (3)1.1课程设计目的 (3)1.2任务概述 (3)1.3课程设计内容 (3)第二章概要设计 (5)2.1设计思想 (5)2.2二叉树的遍历 (5)2.3运行界面设计 (6)第三章详细设计 (7)3.1二叉树的生成 (7)3.2二叉树的先序遍历 (7)3.3 二叉树的中序遍历 (8)3.4二叉树的后续遍历 (8)3.5主程序的设计 (8)第四章测试分析 (11)4.1二叉树的建立 (11)4.2二叉树的先序、中序、后序遍历 (11)第五章课程设计总结 (12)附录:程序代码 (13)致谢 ···········································································································错误!未定义书签。
数学与计算机学院课程设计说明书课程名称: 数据结构与算法课程设计课程代码:题目: 线索二叉树的应用年级/专业/班: 2010级软件1班学生姓名:学号: 1127开始时间:2011 年12 月9 日完成时间:2011 年12 月23 日课程设计成绩:1指导教师签名:年月日摘要首先是对需求分析的简要阐述,说明系统要完成的任务和相应的分析,并给出测试数据。
其次是概要设计,说明所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次关系,以及ADT描述。
然后是详细设计,描述实现概要设计中定义的基本功操作和所有数据类型,以及函数的功能及代码实现。
再次是对系统的调试分析说明,以及遇到的问题和解决问题的方法。
然后是用户使用说明书的阐述,然后是测试的数据和结果的分析,最后是对本次课程设计的结论。
关键词:线索化;先序遍历;中序遍历;后续遍历线索二叉树的运用引言数据结构是计算机专业重要的专业基础课程与核心课程之一,在计算机领域应用广泛,计算机离不开数据结构。
数据结构课程设计为了能使我们掌握所学习的知识并有应用到实际的设计中的能力,对于掌握这门课程的学习方法有极大的意义。
本课程设计的题目为“线索二叉树的应用”,完成将二叉树转化成线索二叉树,采用前序、中序或后序线索二叉树的操作。
本课程设计采用的编程环境为Microsoft Visual Stdio 2008。
目录1需求分析 (3)2开发及运行平台 (4)3 概要设计 (5)4 详细设计 (7)5 调试分析 (12)6 测试结果 (13)7 结论 (18)致谢 (19)参考文献 (20)附录 (21)1、需求分析为了能更熟练精准的掌握二叉树的各种算法和操作,同时也为了开拓视野,综合运用所学的知识。
为此,需要将二叉树转化成线索二叉树,采用前序、中序或后序线索二叉树,以实现线索树建立、插入、删除、恢复线索等。
1.1任务与分析中次系统要实现对二叉树的建立,以及线索化该二叉树,同时实现对其先序、中序、后序线索话的并输出结果。
大学计算机信息技术教学大纲Skill Training of University Course of Study on Information Technology适用专业:全校各专业 课程编号:0809113004学 分:3.5总学时:56一、课程性质、目的与要求课程性质:公共基础课课程目的:初步掌握计算机基础知识、计算机系统、计算机网络、数据结构与算法、程序设 计、软件工程和数据库设计的基础知识,能比较熟练地使用win7操作系统和五个常用的软 件(IE, Outlook Express , Word 2010 , Excel 2010 , PowerPoint 2010)教学要求:要求学生具有使用微型计算机的基础知识(包括计算机病毒的防治常 识);了解微型计算机系统的组成和各组成部分的功能;了解操作系统的基本功 能和作用;了解计算机网络的基本概念和因特网(Internet )的初步知识;掌握 算法的基本概念;基本数据结构及其操作;基本排序和查找算法;逐步求精的结构化程序 设计方法;软件工程的基本方法,具有初步应用相关技术进行软件开发的能力;数据库的基 本知识,了解关系数据库的设计。
要求学生具有熟练使用win7操作系统;磁盘文件管理能 力;文档处理能力;电子表格绘制处理能力;幻灯片制作能力;网页制作和Internet 使用能 力。
二、教学内容理论总学时:32学时第一章计算机基础知识5学时基本要求:掌握计算机的发展、类型及其应用领域。
掌握计算机中数据的表示、存储与处理。
了解多媒体技术的概念与应用。
了解计算机病毒的概念、特征、分类与防治。
重点:计算机中数据的表示、存储与处理。
难点:计算机中数据的表示与处理。
第二章计算机系统 基本要求:掌握计算机硬件系统的组成、功能和工作原理。
掌握计算机软件系统的组成和功 能,了解系统软件与应用软件的概念和作用。
掌握计算机的性能和主要技术指标。
掌握操作 系统的概念和功能。
二级MS Office高级应用(新大纲)选择题题目、解析及答案(11)1.通常,现代计算机内部用来表示信息的方法是()。
A) 计算机内部均采用二进制表示各种信息B) 计算机内部混合采用二进制、十进制和十六进制表示各种信息C) 计算机内部采用十进制数据、文字显示以及图形描述等表示各种信息D) 计算机内部均采用十进制表示各种信息参考答案:A2.作为现代计算机理论基础的冯•诺依曼原理和思想是()。
A) 十进制和存储程序概念B) 十六进制和存储程序概念C) 二进制和存储程序概念D) 自然语言和存储器概念参考答案:C3.字长是计算机的一个重要指标,在工作频率不变和CPU体系结构相似的前提下,字长与计算机性能的关系是()。
A) 字长越长,计算机的数据处理速度越快B) 字长越短,计算机的数据处理速度越快C) 字长表示计算机的存储容量大小,字长越长计算机的读取速度越快D) 字长越短,表示计算机的并行能力越强参考答案:A4.一台计算机的硬盘容量标为800GB,其存储容量是()。
A) 800×2^10 BB) 800×2^20 BC) 800×2^30 BD) )800×2^40 B参考答案:C解析:1GB=1024MB=1024×1024KB=1024×1024×1024B=2^30B,800GB=800×2^30B。
5.计算机中的字符包括西文字符和中文字符,关于字符编码,下列说法错误的是()。
A) 在计算机中,西文字符和中文字符采用相同的二进制字符编码进行处理B) 计算机中最常用的西文字符编码是ASCII,被国际标准化组织指定为国际标准C) 在计算机中,对于西文与中文字符,由于形式的不同,使用不同的编码D) 国标码是一种汉字的编码,一个国标码用两个字节来表示一个汉字参考答案:A6.下列关于计算机病毒的说法中,正确的是()。
A) 计算机病毒是一种有损计算机操作人员身体健康的生物病毒B) 计算机病毒发作后,将会造成计算机硬件永久性的物理损坏C) 计算机病毒是一种通过自我复制进行传染的,破坏计算机程序和数据的小程序D) 计算机病毒是一种有逻辑错误的程序参考答案:C7.工业上的数控机床所属的计算机应用领域是()。
数据结构课程设计--按层次遍历二叉树学号:题目按层次遍历二叉树学院计算机科学与技术专业计算机科学与技术班级姓名指导教师2013 年 6 月 20 日11 问题描述及要求 (4)1.1问题描述 (4)1.2任务要求 ............................................................. 4 2 开发平台及所使用软件 ....................................................... 4 3 程序设计思路 (5)3.1 二叉树存储结构设计 (5)3.2 题目算法设计 (5)3.2.1 建立二叉树 (5)3.2.2 遍历二叉树 (5)3.3.3 按要求格式输出已建立的二叉树 (6)3.3 测试程序 ............................................................ 6 4 调试报告...................................................................6 5 经验和体会 ................................................................. 6 6源程序清单及运行结果 (7)6.1源程序清单 (7)6.2 运行结果 ............................................................. 9 7 参考文献..................................................................10 本科生课程设计成绩评定表 (11)2课程设计任务书学生姓名: 专业班级: 计科ZY1102班指导教师: 工作单位: 计算机科学系题目: 按层次遍历二叉树初始条件:编写按层次顺序(同一层自左至右)遍历二叉树的算法。
2022年职业考证-软考-软件评测师考试全真模拟全知识点汇编押题第五期(含答案)一.综合题(共15题)1.单选题一棵二叉树前序遍历序列为ABCDEFG,则它的中序遍历序列可能是()。
问题1选项A.CABDEFGB.ABCDEFGC.DACEFBGD.DCABFEG【答案】B【解析】二叉树的遍历:前序遍历:先访问根结点,再依次按前序遍历的方式访问根结点的左子树、右子树。
中序遍历:先中序遍历根结点的左子树,再访问根结点,再中序遍历根结点的右子树。
后序遍历:先中序遍历根结点的左子树,再中序遍历根结点的右子树,再访问根结点。
层次遍历:先访问第一层的根结点,然后从左到右依次访问第二层上的所有结点,再以同样的方式访问下一层,直到访问到树中最低层的所有结点。
题干为前序遍历,可以判断A为根结点。
选项A:结合题干可以判断C为左子结点,其余为右子结点,因此C在前序遍历中应为第2个元素,所以A错误选项B:结合题干可以判断该二叉树没有左子结点,A为根结点,B为右子树的根,B没有左结点,C为B 右结点,C没有左结点,D为C的右结点,依次类推,可以得出是一个只有右结点的单支树。
选项C:结合题干可以判断D为该树的左结点,那么在前序遍历中D应该为第2个元素,所以C错误选项D:结合题干可以判断D、C为左孩子结点,A为根结点,其余为右孩子结点,所以在前序遍历中,D、C出现的位置应该在B之前,所以D错误2.单选题以下不属于安全防护系统测试的是()。
问题1选项A.入侵检测系统等的测试B.安全审计系统的测试C.系统业务逻辑的测试D.防火墙的测试【答案】C【解析】基本安全策略测试防火墙:是否支持交换和路由两种工作模式是否支持对HTTP、FTP、SMTP等服务类型的访问控制是否考虑到防火墙的冗余设计是否支持对日志的统计分析功能,同时,日志是否可以存储在本地和网络数据库上对防火墙本身或受保护网段的非法攻击系统,是否提供多种告警方式以及多种级别的告警入侵检测系统:能否在检查到入侵事件时,自动执行切断服务、记录入侵过程、邮件报警等动作是否支持攻击特征信息的集中式发布和攻击取证信息的分布式上载能否提供多种方式对监视引擎和检测特征的定期更新服务内置的网络能否使用状况监控工具和网络监听工具漏洞扫描:能否定期或不定期地使用安全性分析软件,对整个内容系统进行安全扫描,及时发现系统的安全漏洞、报警,并提出补救建议病毒防治:能否支持多种平台的病毒防范能否支持对服务器的病毒防治能否支持对电子邮件附件的病毒防治能否提供对病毒特征信息和检测引擎的定期在线更新服务防病毒范围是否广泛,是否包括UNIX系列、Windows系列、LINUX系列等操作系统安全审计:能否进行系统数据收集,统一存储,集中进行安全审计是否支持基于PKI的应用审计是否支持基于XML的审计数据采集协议是否提供灵活的自定义审计规则Web信息防纂改系统:是否支持多种操作系统是否具有集成发布与监控功能,使系统能够区分合法更新与非法纂改是否可以实时发布和备份是否具备自动监控、自动恢复、自动报警的能力是否提供日志管理、扫描策略管理和更新管理选项C不属于安全防护系统测试的内容3.单选题以下关于软件功能性的叙述中,不正确的是()。
一, 选择题(1) 下面叙述正确的是(C)A.算法的执行效率及数据的存储结构无.B.算法的空间困难度是指算法程序中指令(或语句)的条.C.算法的有穷性是指算法必需能在执行有限个步骤之后终.D.以上三种描述都不对(2) 以下数据结构中不属于线性数据结构的是(C)A.队.B.线性.C.二叉.D.栈(3) 在一棵二叉树上第5层的结点数最多是(B) 注: 由公式2k-1得A..B.1.C.3.D.15(4) 下面描述中, 符合结构化程序设计风格的是(A)A.运用依次. 选择和重复(循环)三种基本限制结构表示程序的限制逻.B.模块只有一个入口,可以有多个出.C.注意提高程序的执行效.D.不运用goto语句(5) 下面概念中, 不属于面对对象方法的是 (D) 注: P55-58A.对.B.继.C..D.过程调用(6) 在结构化方法中, 用数据流程图(DFD)作为描述工具的软件开发阶段是(B)-A.可行性分.B.需求分.C.具体设.D.程序编.(7) 在软件开发中, 下面任务不属于设计阶段的是(D)A.数据结构设.B.给出系统模块结构C.定义模块算.D.定义需求并建立系统模型(8) 数据库系统的核心是(B)A.数据模.B.数据库管理系.C.软件工.D.数据库(9) 下列叙述中正确的是(C)A.数据库是一个独立的系统, 不须要操作系统的支持B.数据库设计是指设计数据库管理系统C.数据库技术的根本目标是要解决数据共享的问题D.数据库系统中, 数据的物理结构必需及逻辑结构一样(10) 下列模式中, 能够给出数据库物理存储结构及物理存取方法的是(A) 注: P108A.内模.B.外模.C.概念模.D.逻辑模式(11) 算法的时间困难度是指(C)A.执行算法程序所须要的时.B.算法程序的长.C.算法执行过程中所须要的基本运算次.D.算法程序中的指令条数(12) 算法的空间困难度是指(D)A.算法程序的长.B.算法程序中的指令条.C.算法程序所占的存储空.D.算法执行过程中所须要的存储空间(13) 设一棵完全二叉树共有699个结点, 则在该二叉树中的叶子结点数为(B) 注: 利用公式n=n0+n1+n2, n0=n2+1和完全二叉数的特点可求出A.34.B.35.C.25.D.351(14) 结构化程序设计主要强调的是(B)A.程序的规模B.程序的易读性C.程序的执行效率D.程序的可移植性(15) 在软件生命周期中, 能精确地确定软件系统必需做什么和必需具备哪些功能的阶段是(D) 注: 即第一个阶段A.概要设.B.具体设.C.可行性分.D.需求分析(16) 数据流图用于抽象描述一个软件的逻辑模型, 数据流图由一些特定的图符构成。
摘要数据结构是研究与数据之间的关系,我们称这一关系为数据的逻辑结构,简称数据结构。
当数据的逻辑结构确定以后,数据在物理空间中的存储方式,称为数据的存储结构。
相同的逻辑结构可以具有不同的存储结构,因而有不同的算法。
本次课程设计,程序中的数据采用“树形结构”作为其数据结构。
具体采用的是“二叉排序树”,并且使用“一维数组”来作为其存储结构。
一维数组顺序表存储结构是用一组地址连续的存储单元依次自上而下、自左而右存储完全二叉树上的结点元素;本课程设计实现了二叉排序树的创建、中序遍历、计算二叉排序树的平均查找长度和删除二叉排序树中某个结点。
本课程主要介绍了本课题的开发背景,所要完成的功能和开发的过程。
重点说明了系统的设计思路、总体设计、各个功能模块的设计与实现方法。
关键词:二叉排序树的实现;C语言;数据结构;线性表;顺序表;中序遍历。
目录摘要 (I)1 课题背景的介绍 (3)1.1 课题背景 (3)1.2 目的 (3)2 需求分析 (3)课程设计题目、任务及要求 (3)课程设计思想 (4)3 系统总体设计 (5)3.1 系统模块划分 (5)3.2 二叉排序树的生成过程 (5)3.3 主要功能模块设计 (5)4 系统详细设计 (7)4.1 主函数菜单模块 (7)4.2 查找模块 (8)4.3 插入模块 (9)4.4 中序遍历模块 (10)删除模块 (11)5 系统连编与运行 (13)6 总结 (14)参考文献 (15)附录 (14)A)课题背景的介绍课题背景随着经济的迅速发展,各行各业纷纷应用电脑数据信息管理。
当然数据信息是一个很笼统的概念,随着现代信息的大量增加,其处理难度也越来越大,如何对各个数据信息进行更好的树立,这就是我们研究这个课题的目的。
在电脑迅速发展的今天,将电脑这一信息处理器应用于实际数据问题问题的信息计算已是势必所然,而且这也将数据信息处理带来前所未有的改变。
采用电脑对数据的信息处理是信息科学化和现代化的重要标志,它也给各行各业带来了明显的经济效益。
数据库设计是数据库应用的核心面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物的一个实体所谓完全二叉树是指除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点。
具有n个结点的完全二叉树,其父结点数为int(n/2),而叶子结点数等于总结点数减去父结点数。
本题n=500,故父结点数等于int(500/2)=250,叶子结点数等于500-250=250。
冒泡排序法是一种最简单的交换类排序方法,它是通过相邻数据元素的交换逐步将线性表变成有序。
假设线性表的长度为n,则在最坏的情况下,冒泡排序需要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n-1)/2。
执行下列程序段后,x和i的值分别是______和______。
int x,i;for (i=1,x=1;i<=50;i++){ if(x>=10) break;if(x%2==1){x+=5;continue;}x-=3;}本题的考查点是break语句和continue语句。
在for循环中,当x>=10时,循环便会终止;当x<10时,如果x整除2的余数为1,则x等于x+5,否则x等于x-3。
将实际的值带入程序中进行运算即可得到正确答案,当循环结束的时候,x和i的值分别是10和6。
故本题答案为:10和6。
以下程序中用户由键盘输入一个文件名,然后输入一串字符(用#结束输入)存放到此文件中,形成文本文件,并将字符的个数写到文件的尾部。
请填空。
# include <stdio.h>main( ){ FILE *fp;char ch,fname[32]; int count=0;printf("Input the filename :");scanf("%s",fname);if((fp=fopen(______,"w+"))==NULL){ printf("Can't open file:%s\n",fname);exit(0);}printf("Enter data:\n");while((ch=getchar())!='#'){ fputc(ch,fp); count++; }fprintf(______,"\n%d\n",count);ffopen()函数实现打开文件的功能,通常的调用方式为:FILE *fp;fp=fopen(文件名,使用文件方式);因此,第一个横线处要求填写要打开文件的名字fname。
目录摘要 (1)前言 (3)正文 (5)1.采用类C语言定义相关的数据类型 (5)2.各模块的伪码算法 (6)3.函数的调用关系图 (19)4.调试分析 (19)5.测试结果 (20)6.源程序(带注释) (22)总结 (29)参考文献 (30)致谢 (31)附件Ⅰ部分源程序代码 (32)摘要该程序设计主要是为实现二叉树的一些基本操作,主要有使用二叉链表和三叉链表存储二叉树,主要功能有:已知二叉树的前序、中序序列,恢复此二叉树;求二叉树高度、分支结点数和叶子结点数;插入结点到指定位置、删除指定结点;将二叉树中所有结点的左右子树交换;对二叉树进行层序、非递归中序遍历等操作。
在完成编码以后,对于测试至少含有10个测试数据,算法对于这些合法的输入数据都能产生满足规格说明要求的结果。
同时算法对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足规格说明要求的结果;对算法实现过程中的异常情况能给出有效信息。
下面是相应的函数功能的简要描述:(1)主函数采用case的选择结构,分析输入的题号,从而做相应的操作。
当为9时程序退出。
(2)结构体根据二叉树及本题的特点,特定义的结构体为左孩子,右孩子的指针域,存储字符数据的数据域。
即选择二叉链表,因为题中没有要求找出二叉树中某个结点的双亲,即没有必要用三叉链表。
左右孩子指针及数据域分别用*lchild,*rchild,date.(3)建树采用先序遍历的顺序进行创建,并输入数据,由键盘输入每个节点的数据,当输入为“”时,当前操作的节点指针为NULL,采用先左子树后右子树的顺序函数根据输入数据的形式,生成相应的二叉树结构。
(5)遍历题中要求实现三种遍历,使用递归调用可实现这个功能,而且简单明了。
在程序调用要实现遍历时,分别调用三种遍历,使其显示在屏幕上。
前序遍历(Preorde)访问根按先根遍历根的左子树按先根遍历根的右子树中序遍历(Midorde)按先根遍历根的左子树访问根按先根遍历根的右子树后序遍历(Backorder)访问根按先根遍历根的左子树按先根遍历根的右子树访问根(6)输出叶子主要思想:如果遍历左右孩子都为空时即为叶子结点。
(7)打印树选用一个变量,每进行一次递归变量自动加5,同时利用循环打印出足够的空格,然后输出数据;(8)销毁树采用后序遍历实现二叉树的清空操作。
关键字:二叉树;建树;叶子结点;父结点;左子数;右子数;深度;先序遍历;中序遍历;后续遍历。
前言该程序通过以下几个模块的功能来实现:1.用二叉链表存储二叉树。
2.已知二叉树的前序、中序序列,恢复此二叉树。
3.求二叉树的高度。
4.求二叉树的分支节点数。
5.求二叉树的叶子节点数。
6.插入节点到指定位置,删除指定节点。
7.将二叉树中所有结点的左右字数交换。
8.对二叉树进行层序遍历。
在以上的具体模块中采用C语言来实现其功能,通过具体的代码来实现。
相关框图如下:正文1.采用类c语言定义相关的数据类型#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>typedef struct node{int data; //节点信息 int no;struct node *lchild; //左孩子 struct node *rchild; //右孩子}BTnode;void Init(BTnode *&b) //初始化int Insert(BTnode *&b,int m) //插入操作int output(BTnode *&b,int i) //层次输出void xianxu(BTnode*&b) //先序void zhongxu(BTnode *&b) //中序void houxu(BTnode *&b) //后序void menu() //菜单{BTnode *b;Init(b);int i,j,k,y,m;}int main() //主函数{menu();system("pause")}2.各模块的伪码算法一.用二叉链表存储二叉树的算法:typedef hufnode *linkhuf;linkhuf Creat_Node(int n) //创建二叉链表{linkhuf head,pre,p;int x;head=NULL;while(n--){scanf("%d",&x);p=(linkhuf)malloc(sizeof(hufnode));p->data=x;p->lchild=NULL;p->rchild=NULL;if(NULL==head){head=p;pre=head;}else{p->next=pre->next;pre->next=p;pre=pre->next;}}return head;}linkhuf insert(linkhuf root , linkhuf s)//将结点S插入到有序Huffman root 中。
{linkhuf p1,p2;if(NULL == root ) root=s;else{p1=NULL;p2=root;while(p2&&p2->data<s->data){p1=p2;p2=p2->next;}s->next=p2;if(NULL==p1){root=s;}else{p1->next=s;}}return root;}void Preorder1(linkhuf t){if(t!=NULL){printf("%-6d",t->data);Preorder1(t->lchild);Preorder1(t->rchild);}}二.已知二叉树的前序、中序序列,恢复此二叉树://定义二叉树节点template<class T>struct BinTreeNode{T info; //数据域BinTreeNode* llink; //左孩子BinTreeNode* rlink; //右孩子};template<class T>inTreeNode<T>* Restore(const T pre[],const T in[],int &count,int low,int high,const int n){/*pre,in 分别存储所需恢复二叉树的前序[1:n],中序[1:n],首元素不用的。
count-前序数组的下标low,high确定二叉树的中序边界思路:将前序的每一个元素当做根节点,然后到中序中找到这个元素,然后再按:左,中,右,的顺序确定之*/BinTreeNode<T>*p;if(count>n){p=NULL;return p;};p=new BinTreeNode<T>;if(low==high&&pre[count]==in[low]) //扫描到叶子节点{p->info=pre[count];p->llink=NULL;p->rlink=NULL;return p;}//扫描到非叶子节点for(int i=low;i<=high&&in[i]!=pre[count];i++);p->info=pre[count];p->llink=Restore(pre,in,++count,1,i-1,n);p->rlink=Restore(pre,in,++count,i+1,n,n);return p;}三.求二叉树的高度:status HighBitree(BiTree t){if (t == NULL)return 0;elsereturn 1 + Max(HighBitree(t->lchild),HighBitree(t->rchild));}四.求二叉树的分支节点数://计算单分支结点int count_n2 (BiTree T) {if (T == NULL) return ERROR;elseif (T -> lchild == NULL && T -> rchild ==NULL) return ERROR;else {if(!T -> lchild && T-> rchild) return count_n2 (T -> rchild);if(T -> lchild && !T-> rchild) return count_n2 (T -> lchild);if(T -> lchild && T-> rchild) return count_n2 (T -> lchild) + count_n2 (T -> rchild) + 1;}};//计算双分支结点int count (BiTree T) {if (T == NULL) return ERROR;elseif (T -> lchild == NULL && T -> rchild ==NULL) return OK;else {if(!T -> lchild && T-> rchild) return count (T -> rchild);if(T -> lchild && !T-> rchild) return count (T -> lchild);if(T -> lchild && T-> rchild) return count (T -> lchild) + count (T -> rchild);if(!T -> lchild && !T-> rchild) return count (T -> lchild) + count (T -> rchild) + 1;}};五.求二叉树的叶子节点数:status NumberLeaves(BiTree T){ //先序遍历得到叶结点的数目//m=0;if(T){if(T->lchild==NULL&&T->rchild==NULL) m++;NumberLeaves(T->lchild);NumberLeaves(T->rchild);}return OK;}int btnodeheight(BiTree b){int lchildh,rchildh;if (b==NULL) return(0);else{lchildh=btnodeheight(b->lchild);rchildh=btnodeheight(b->rchild);return (lchildh>rchildh)? (lchildh+1):(rchildh+1);}}六.插入节点到指定位置,删除指定节点:int Insert(BTnode *&b,int m) //插入操作{BTnode *q;if(count==1){b=(BTnode*)malloc(sizeof(BTnode));b->data=m;b->no=count;b->lchild=b->rchild=NULL;count++;}else if(b!=NULL){if(b->no!=count/2){if(Insert(b->lchild,m)==0)return 0;if(Insert(b->rchild,m)==0)return 0;}else{q=(BTnode*)malloc(sizeof(BTnode));q->data=m;q->no=count;q->lchild=q->rchild=NULL;if(count%2==0)b->lchild=q;else b->rchild=q;count++;return 0;}}}/*插入左子树*/bitnode *insertl(bitnode *b,char x,char e){bitnode *stack[MAXNODE],*p,*s,*t;s=(bitnode*)malloc(sizeof(bitnode)); s->data=e;s->lchild=NULL;s->rchild=NULL;int top;if(b!=NULL){top=1;stack[top]=b;while(top>0){p=stack[top];top--;printf("%c ",p->data);if(p->data==x)t=p;if(p->rchild!=NULL){top++;stack[top]=p->rchild;}if(p->lchild!=NULL){top++;stack[top]=p->lchild;}}}s->lchild=t->lchild;s->rchild=t->rchild;t->lchild=s;printf("\n");return(b);}void print(bitnode *b){if(b!=NULL){printf("%c",b->data);if(b->lchild!=NULL||b->rchild!=NULL){printf("(");print(b->lchild);if(b->rchild!=NULL)printf(", ");print(b->rchild);printf(")");}}}/*插入右子树*/bitnode *insertr(bitnode *b,char x,char e) {bitnode *stack[MAXNODE],*p,*s,*t;s=(bitnode*)malloc(sizeof(bitnode));s->data=e;s->lchild=NULL;s->rchild=NULL;int top;if(b!=NULL){top=1;stack[top]=b;while(top>0){p=stack[top];top--;printf("%c ",p->data); if(p->data==x)t=p;if(p->rchild!=NULL){top++;stack[top]=p->rchild; }if(p->lchild!=NULL){top++;stack[top]=p->lchild; }}}s->lchild=t->lchild; s->rchild=t->rchild; t->rchild=s;printf("\n");return(b);}/*删除左子树*/bitnode *deletl(bitnode *b,char x) {bitnode *stack[MAXNODE],*p,*t;int top;if(b!=NULL){top=1;stack[top]=b;while(top>0){p=stack[top];top--;printf("%c ",p->data);if(p->data==x)t=p;if(p->rchild!=NULL){top++;stack[top]=p->rchild;}if(p->lchild!=NULL){top++;stack[top]=p->lchild;}}}t->lchild=NULL;printf("\n");return(b);}/*删除右子树*/bitnode *deletr(bitnode *b,char x) {bitnode *stack[MAXNODE],*p,*t;int top;if(b!=NULL){top=1;stack[top]=b;while(top>0){p=stack[top];top--;printf("%c ",p->data);if(p->data==x)t=p;if(p->rchild!=NULL){top++;stack[top]=p->rchild;}if(p->lchild!=NULL){top++;stack[top]=p->lchild;}}}t->rchild=NULL;printf("\n");return(b);}if(a==4){printf("请输入要插入结点的双亲及要插入的元素(如bc)-----"); char x,e;cin>>x>>e;print(insertl(bt, x, e));cout<<endl<<endl<<endl<<endl;}if(a==5){printf("请输入要插入结点的双亲及要插入的元素(如bc)-----"); char x,e;cin>>x>>e;print(insertr(bt, x, e));cout<<endl<<endl<<endl<<endl;}if(a==6){printf("请输入要删除的双亲结点-----");char y;cin>>y;print(deletl(bt, y));cout<<endl<<endl<<endl<<endl;}if(a==7){printf("请输入要删除的双亲结点-----");char y;cin>>y;print(deletr(bt, y));cout<<endl<<endl<<endl<<endl;}七.将二叉树中所有结点的左右字数交换:int Depth (BiTree T ) {int depthval,depthLeft,depthRight;if ( !T ) depthval = 0;else {depthLeft = Depth( T->lchild );depthRight= Depth( T->rchild );depthval = 1 + (depthLeft > depthRight ?depthLeft : depthRight);}return depthval;八.对二叉树进行层序遍历:int count_n1 (BiTree T) {if (T == NULL) return ERROR;elseif (T -> lchild ==NULL && T -> rchild == NULL ) return ERROR;else {if (!T -> lchild && T -> rchild) return count_n1 (T -> rchild) + 1;if (T -> lchild && !T -> rchild) return count_n1 (T -> lchild) + 1;if (T -> lchild && T -> rchild) return count_n1 (T -> lchild) + count_n1 (T -> rchild) + 1;}3.函数的调用关系图4.调试分析a、调试中遇到的问题及对问题的解决方法调试中遇到的问题及对问题的解决方法调试中许多错误都是语法错误,还有有些错误属于参数没有合理的定义,通过细心的修改和老师同学的帮助,算法得以完善。