求二叉树叶子结点数和高度
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验题目:求二叉树叶子结点数和高度
一、实验目的
•加深理解二叉树的定义和特性;
•掌握二叉树的存储结构与实现;
•掌握二叉树的遍历操作及其应用
二、实验内容:
根据键盘输入的扩展二叉树的前序遍历序列建立相应的二叉树,并计算该二叉树的叶子结点个数和高度。
三、设计与编码
1、基本思想
利用二叉树的前序遍历操作,叶子结点个数和二叉树深度,设计递归算法实现。
2、编码
#include
using namespace std;
struct BiNode
{
char data;
BiNode *lchild, *rchild;
};
class BiTree
{
public:
BiTree()
{
root=Creat(root);
}
~BiTree()
{
Release(root);
}
BiNode * Getroot()
{
return root;
}
void PreOrder(BiNode *root)
{
if(root==NULL)
return;
else
{
cout<
PreOrder(root->lchild);
PreOrder(root->rchild);
}
}
int LeafCount(BiNode *root)
{
if(root==NULL)
return 0;
else
{
if(root->lchild==NULL&&root->rchild==NULL)
return 1;
else
return LeafCount(root->lchild)+LeafCount(root->rchild);
}
}
int Height(BiNode *root)
{
int hl,hr,h;
if(root==NULL)
return 0;
else
{
hl=Height(root->lchild);
hr=Height(root->rchild);
h=(hl>hr?hl:hr)+1;
}
return h;
}
private:
BiNode *root;
BiNode *Creat(BiNode *bt)
{
char ch;
cin>>ch;
if(ch=='#')return 0;
else
{
bt=new BiNode;bt->data=ch;
bt->lchild=Creat(bt->lchild);
bt->rchild=Creat(bt->rchild);
}
return bt;
}
void Release(BiNode *bt)
{
if(bt==NULL)
{
Release(bt->lchild);
Release(bt->rchild);
delete bt;
}
}
};
int main()
{
cout<<"请输入创建一棵二叉树的结点数据:"< BiTree bt; BiNode *root = bt.Getroot( ); cout< cout<<"------前序遍历------ "< bt.PreOrder(root); cout< cout<<"该二叉树的叶子结点数为:"; cout< cout<<"该二叉树的高度为:"; cout< return 0; } 四、调试与运行 1、调试时遇到的主要问题及解决 主要都是一些小细节没有注意,害我找了老半天才搞定。 2、运行结果(输入及输出,可以截取运行窗体的界面) 五、实验心得 通过本次的实验,让我加深了理解了串的操作。也认识到了我的不足,也懂得了很多。在之前,只是一直盲目的跟着书本上的东西打,就像打字一样,不用思考,也不会实际应用。通过这次实验,让我们有了实践的机会。同时也复习了一些C++的知识,让我更加熟悉这些简单语句,也通过书上的很多错误来敲醒我的盲从,学习必须脚踏实地,多写程序,多实践,才是进步的法门。从一次次实验的失败到一次次找办法解决冲突,让我更加学会如何借助帮助文件以及和同学交流来解决问题。这次实验我受益匪浅啊! 谢谢学校给我提供了这么好的环境,也谢谢老师对我们的细心指导,老师您辛苦了! 说明:实验报告上交电子版,由学委统一发到我邮箱:yulwf@,上交时间为下次实验课之前。实验报告一定要按时交,不能抄袭!!否则,后果自负。 每次实验一个文件夹,文件夹名称为学号+姓名;内包含两个文件:1,实验报告2,源程序