二叉树基本操作实验报告.docVIP

  • 797
  • 0
  • 约4.8千字
  • 约 10页
  • 2018-11-19 发布于广东
  • 举报
二叉树基本操作实验报告.doc

一、 实验目的 选择二叉链式存储结构作为二叉树的存储结构,设计一个程序实现 二叉树的基本操作(包括建立、输出、前序遍历、中序遍历、后序遍 历、求树高、统计叶子总数等) 二、 实验开发环境 Windows 8. 1 中文版 Microsoft Visual Studio 6. 0 三、 实验内容 程序的菜单功能项如下: ?建立一棵二叉树 前序遍历递归算法 3.?前序遍历非递归算法 3. ?前序遍历非递归算法 中序遍历递归算法 中序遍历非递归算法 6……后序遍历递归算法 ?后序遍历非递归算法 8……求树高 9……求叶子总数 10…?-输出二叉树 11…退出 3、实验分析 1、建立一棵二叉树 2、输入二叉树各节点数据 cout?”请按正确顺序输入二叉树的数据:”; cin.getline(t,1000); //先把输入的数据输入到一个t数组 3、递归前序遍历 void BLl(ECS_data *t) { if(NULL!=t) { cout?t-〉data’’,; BLl(t-〉l); BLl(t-〉r); } } 4、非递归前序遍历 void preOrder2(ECS_data *t) { stackECS_data*〉s; ECS_data *p=t; while(p!=NULL||!s.empty()) { while(p!=NULL) { cout?p-data? s.push(p); p=p-〉l; } if(!s.empty()) { p=s.top(); s.popO; p=p-〉r; } } } 5、递归中序遍历 void BL2(ECS_data *t) { if(NULL!=t) cout?t-data?,7; BL2(t-r); } 6、非递归中序遍历 void inOrder2(ECS_data *t) //非递归中序遍历 { stackECS一data*〉s; ECS一data *p=t; while(p! =NULL||! s.emptyO) while(p!=NULL) { s.push(p); p=p-〉l; } if(!s.empty()) { p=s.top(); cout?p-data?: s.pop(); p=p-〉r; } 7、递归后序遍历 void BL3(ECS_data *t) { if(NULL!=t) { BL3(t-l); BL3(t-r); cout?t-data? ; 8、非递归后序遍历 void postOrder3(ECS_data *t) { stackECS_data* s; ECS_data *cur; //当前结点 ECS_data *pre=NULL; //前一次访问的结点 s.push(t); while(!s.empty()) cur=s.top(); if((cur-l==NULLcur-r==NULL)|| (pre! =NULL(pre==cur-l | |pre==cur-r))) { cout?cur-data?H //如果当前结点没有孩子结点或者孩 子节点都已被访问过 s.pop(); pre=cur; } else { if(cur-r!=NULL) s.push(cur-r); if(cur-〉l!=NULL) s.push(cur-l); } 9、求树高 int Height (ECS_data *t) { if(t==NULL) return 0; else { int m = Height (t-l); int n = Height(t-r); return (m n) ? (m+1): (n+1); } } 10、求叶子总 int CountLeaf(ECS_data *t) { static int LeafNum=0;//叶子初始数目为0,使用静态变量 if(t)//树非空 { if(t-〉l==NULLt-〉r==NULL)//为叶子结点 LeafNum++;//叶子数目加1 else//不为叶子结点 CountLeaf(t-〉l);//递归统计左子树叶子数目 CountLeaf(t-r);//递归统计右子树叶子数目 return LeafNum; } 五、运行结果 6 73 30 65 1- 6 7 3 3 0 6 5 1- 9 5 8 0 0 , 叉:1,84,2 二为,42,9 人数,2:1,4 *按正确 i 6 3 7 5 6 09 5 9 n 4 8 9 斤节历遍历遍历遍:5ke 顺的为y 樹序前^!£:-5-1!£:后:4数仙 正叉薦中归肩为口r 二归遥归遥归遥髙子es S謹非递非递非側叶pr 附:完整程序源代码: //二叉树链式存储的实现 #includeiostream #includecstring #i

文档评论(0)

1亿VIP精品文档

相关文档