欢迎来到天天文库
浏览记录
ID:46813800
大小:155.25 KB
页数:6页
时间:2019-11-28
《实验报告二叉树求叶子结点数目》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验叶子结点的计算姓名:xxx班级:xxx)学号:16130xxxxx时间2017.10.221问题描述二叉树叶子节点的计算1.二叉树的创建2.二叉树的图形显示3.二叉树叶子节点的计算2结构设计二叉树叶子结点的计算主要是二叉树的创建,在这里选择的存储结构是一个链式存储结构Datalchildrchild建立结构体structBTNode{intdata;BTNode*lchild;BTNode*rchild;};3算法设计在程序正式编写之前我定义了几个功能函数(1)指针清空函数,预定义一个指针bt使lchild和rchild的值分别赋予bt并且使其为空sta
2、ticintclear(BTNode*bt){if(bt){clear(bt->lchild);clear(bt->rchild);cout<<"释放了指针"<lchild==NULL&&
3、p->rchild==NULL)count++;Leaf(p->lchild,count);Leaf(p->rchild,count);}returncount;}(1)二叉树的创建同样是利用递归的方式,输入参数包括指针,左右判断,以及判空条件staticintcreate(BTNode*p,intk,intend){BTNode*q;intx;cin>>x;if(x!=end){q=newBTNode;q->data=x;q->lchild=NULL;q->rchild=NULL;if(k==1)p->lchild=q;if(k==2)p->rchild=
4、q;create(q,1,end);create(q,2,end);}return0;};(2)类的构造函数创建树并且输入各结点数值在这里,采用的时先序遍历法依次输入树中的各结点数值Step1:定义新的结构体指针,Step2:申请动态存储空间;Step3:输入节点元素,并且指针后移到输入结点的后继结点,end作为结点结束标志;Step4:重复步骤3,直到输入结束;voidBinaryTree::CreateBiTree(intend){cout<<"请按照先序序列的顺序输入二叉树,-1为空指针域标志:"<>x;
5、if(x==end)return;p=newBTNode;if(!p){cout<<"申请内存失败"<data=x;p->lchild=NULL;p->rchild=NULL;BT=p;create(p,1,end);create(p,2,end);}(1)按树形图输出树Step1:定义结点bt计数器levelStep2:当bt存在bt指向左孩子,level+1换行,输出结点值Step3:bt指向右孩子level+1输出数值,依次递归voidBinaryTree::DisplayBTreeShape(BTNode*bt,
6、intlevel){if(bt){DisplayBTreeShape(bt->rchild,level+1);cout<data;DisplayBTreeShape(bt->lchild,level+1);}}5214程序运行测试643输入该树的先序遍历1,2,3,(-1,-1),4(-1,-1),5,6(-1.-1)(-1)5调试记录及收获调试记录:(1)在开始编译过程中,,程序编译不通过在case选择中创建被直接跳过,仔细检查过程中,,发现在类的调用过程中
7、缺少了类的主体,在后期其余练习中同样碰到了kidding错误,在后期的解决方法中在论坛上找到了解决方法及出错原因initializationof'XXX'isskippedby'case'label原因及解决办法原创2013年08月12日18:34:051461出错代码段:switch(t){case0:inta=0;break;default:break;}编译时提示:“errorC2361:initializationof'a'isskippedby'default'label”。这怎么可能?出错原因:C++约定,在块语句中,对象的作用域从对象的声明语句
8、开始直到块语句的结束,也就是说default标号后的
此文档下载收益归作者所有