收藏 分销(赏)

树的存储与遍历操作实验报告.doc

上传人:仙人****88 文档编号:9073483 上传时间:2025-03-12 格式:DOC 页数:8 大小:169.04KB 下载积分:10 金币
下载 相关 举报
树的存储与遍历操作实验报告.doc_第1页
第1页 / 共8页
树的存储与遍历操作实验报告.doc_第2页
第2页 / 共8页


点击查看更多>>
资源描述
实验五 树的存储与遍历操作 班级:1301203 姓名:向怡 学号:2012214327 日期:2013.11.26 一、实验内容: 1、 写出一个算法建立一棵二叉树并且完成对这棵二叉树的先序遍历、中序遍历和后序遍历。 2、 利用树的遍历求二叉树的结点数 3、 利用树的遍历求二叉树的叶子数 二、实验目的: 通过这个实验,学会对树的定义,对树的存储方法,遍历的基本操作有一个清楚的认识。并且能够用程序模拟树的遍历过程。 三、 概要设计: 3.1 建立一棵二叉树并且完成对这棵二叉树的先序遍历、中序遍历和后序遍历 3.2利用树的遍历求二叉树的节点数(叶子数) 四、代码设计: #include <iostream> using namespace std; typedef char DataType; const int SIZE=50; struct BiNode { DataType data; BiNode *lchild,*rchild; }; class BiTree { public: BiTree() { cout<<"请依次输入前序的扩展二叉数,‘#’表示空"<<endl; root=Creat(root); cout<<"创建完成"<<endl; } ~BiTree() { Release(root); } void PreOrder()//前序遍历 { PreOrder(root); } void InOrder()//中序 { InOrder(root); } void PostOrder()//后序 { PostOrder(root); } void LeverOrder()//层序遍历 { front=rear=-1;//初始化栈指针 if(root==NULL)return; Q[++rear]=root; while (front!=rear) { q=Q[++front];//出队 cout<<q->data; if (q->lchild!=NULL) { Q[++rear]=q->lchild; } if (q->rchild!=NULL) { Q[++rear]=q->rchild; } } cout<<endl; } void Count()//计算叶子和结点数 { int lCount=0,nCount=0; Count(root,nCount,lCount); cout<<"叶子数"<<lCount<<"结点数"<<nCount<<endl; } private: int front,rear; BiNode *root,*q,*Q[SIZE];//指向根结点的头指针,Q是存放指针的数组 BiNode *Creat(BiNode *bt)//构造函数调用(指针函数),前序构造二叉树 { char ch; cout<<"请输入数据"<<endl; cin>>ch; if (ch=='#') { bt=NULL; }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; } } void PreOrder(BiNode *bt)//前序(DLR) { if (bt==NULL){return;} else{ cout<<bt->data<<" "; PreOrder(bt->lchild); PreOrder(bt->rchild); } } void InOrder(BiNode *bt)//中序(LDR) { if(bt==NULL){return;} else{ InOrder(bt->lchild); cout<<bt->data<<" "; InOrder(bt->rchild); } } void PostOrder(BiNode *bt)//后序(LRD) { if(bt==NULL){return;} else{ PostOrder(bt->lchild); PostOrder(bt->rchild); cout<<bt->data<<" "; } } void Count(BiNode *bt,int &nCount,int &lCount)//计算叶子数和结点数(即求二叉树的所有结点中左、右子树均为不为空的结点个数之和) { if (bt!=NULL) { if (bt->lchild==NULL&&bt->rchild==NULL) { lCount++; return; }else { nCount++; } Count(bt->lchild,nCount,lCount); Count(bt->rchild,nCount,lCount); } } }; int main() { BiTree a; int index; do { cout<<"**********************************"<<endl; cout<<"1、前序遍历二叉树"<<endl; cout<<"2、中序遍历二叉树"<<endl; cout<<"3、后序遍历二叉树"<<endl; cout<<"4、计算叶子树和结点数"<<endl; cout<<"5、退出"<<endl; cout<<"**********************************"<<endl; cin>>index; if(index==5){return 0;} switch(index) { case 1: a.PreOrder(); cout<<"遍历完成"<<endl; break; case 2: a.InOrder(); cout<<"遍历完成"<<endl; break; case 3: a.PostOrder(); cout<<"遍历完成"<<endl; break; case 4: a.Count(); break; default: cout<<"输入错误"<<endl; break; } }while(index); return 0; } 四、 测试结果: 前序构造二叉树 主界面 前序遍历 中序遍历 后序遍历 计算叶子数和结点数 程序退出
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服