求二叉树叶子结点数和高度

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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<data<<' ';

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,源程序

相关文档
最新文档