- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构作业——叉树
数据结构实验报告二
题目:
用先序递归过程监理二叉树(存储结构:二叉链表)
输入数据按先序遍历输入,当某节点左子树或者右子树为空时,输入‘*’号,如输入abc**d**e**时,得到的二叉树为:
并用如下实力测试:
算法思路:
显然,建立一个二叉链表存储的二叉树,如果不考虑效率要求,考虑到程序的简介性,递归建立和递归遍历是一种很好的办法。
利用C++的类模板的方法实现建立,遍历,输出等二叉树操作。首先利用构造函数实现先序遍历建立二叉树,然后调用类模板中已经声明好的四种遍历函数,将遍历结果输出,检验建立好的二叉树是否为要求的二叉树。
初始化:利用构造函数建立二叉树。采用先序递归的调用方法,构造函数主体如下:
templateclass T
BiTreeT::BiTree( )
{
this-root = Creat( );//利用this指针调用creat函数
}
template class T
BiNodeT* BiTreeT::Creat()//定义构造函数
{
BiNodeT* root;
T aa;
cout请按前序序列方式输入节点数据,每次输入一个endl;
cinaa;
if (aa==*) root = NULL;
else{
root = new BiNodeT; //生成一个结点
root-data=aa;
root-lchild = Creat(); //递归建立左子树
root-rchild = Creat(); //递归建立右子树
}
return root;
}
构造这样的函数,可以在输入时,按先序遍历顺序每次输入一个节点的数据,可以实现任意二叉树的构造。
为了检验构造的二叉树是否为预先设想的二叉树,需要遍历二叉树并进行输出。考虑到单一的输出并不能确定唯一的二叉树,因此对遍历二叉树的四种常用发方法,即先序遍历,中序遍历,后续遍历,层次遍历分别实现,通过遍历结果检验构造的二叉树是否为预先设计好的二叉树。
先序遍历:采用递归的方法建立。
templateclass T
void BiTreeT::xianxu(BiNodeT *root)
{
if(root==NULL) return;//如果节点为空,则返回空
else{
coutroot-data ;//访问根节点
xianxu(root-lchild);//先序遍历树的左子树
xianxu(root-rchild);//先序遍历树的右子树
}
中序遍历:递归方法建立:
template class T
void BiTreeT::zhongxu (BiNodeT *root)
{
if (root==NULL) return; //如果节点为空,则返回空
else{
zhongxu (root-lchild); //中序递归遍历root的左子树
coutroot-data ; //访问根结点
zhongxu (root-rchild); //中序递归遍历root的右子树
}
}
后序遍历:递归方法建立:
template class T
void BiTreeT::houxu(BiNodeT *root)
{
if (root==NULL) return; //如果节点为空,返回空
else{
houxu(root-lchild); //后序递归遍历root的左子树
houxu(root-rchild); //后序递归遍历root的右子树
coutroot-data ; //访问根节点
}
}
层序遍历:采用非递归方法。利用队列的方法层序遍历二叉树。建立一个队列,在访问一个节点的时候,把它的左孩子和右孩子入队,并且将这个节点出队。当队列为空时,就完成了对二叉树的层序遍历。
template class T
void BiTreeT::cengxu(BiNodeT *root)
{
const int MaxSize = 100;
int front = 0;
int rear = 0; //利用队列的方法对树进行层序遍历
BiNodeT* Q[MaxSize];
BiNodeT* q;
if (root==NULL) return;// 如果节点为空,返回空
else{
Q[rear++] = root;// 若节点不为空
您可能关注的文档
最近下载
- 平交道口安全管理方案.docx VIP
- 垂体功能减退症的护理查房.pptx VIP
- 2023年铁岭卫生职业学院单招面试试题及答案解析.docx
- 《口袋妖怪叶绿》完整图文攻略解析.doc
- 电梯乘载品质振动标准.doc
- 高考数学解答题专项复习:圆锥曲线中的向量问题(典型题型归类训练)(学生版+解析).pdf VIP
- DB42T 1070-2015银杏物候观测方法.pdf
- 高考数学解答题专项复习:圆锥曲线中的三角形(四边形)面积问题(含定值、最值、范围问题)(典型题型归类训练)(学生版+解析).pdf VIP
- 生产主管年终总结.pptx VIP
- 基层医疗机构发热门诊(或诊室)设置标准(含发热门诊、发热诊室设计参考图).pdf
文档评论(0)