二叉树的先序遍历、中序遍历、后序遍历的递归和非递归算法(共41页).doc
《二叉树的先序遍历、中序遍历、后序遍历的递归和非递归算法(共41页).doc》由会员分享,可在线阅读,更多相关《二叉树的先序遍历、中序遍历、后序遍历的递归和非递归算法(共41页).doc(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上 数据结构 课程设计报告题 目: 二叉树的先序遍历、中序遍历、后序遍历的递归 和 非 递 归 算 法。 学生姓名: * * * 学 号: * 专业班级: 计算机科学与技术专业 *班 同组姓名: * 指导教师: *老师 设计时间: 年下学期第 周 指导老师意见: 评定成绩: 签名: 日期:目 录二、系统项目设计. . . . . . . . . . . . . . .31.二叉树的建立42.先序遍历4 a.递归算法7 b.非递归算法73.中序遍历6 a.递归算法7 b.非递归算法74.后序遍历6 a.递归算法7 b.非递归算法75.主菜单程序45.子菜单程序41.二叉树
2、的建立42.先序遍历4 a.递归算法7 b.非递归算法72.中序遍历6 a.递归算法7 b.非递归算法73.后序遍历6 a.递归算法7 b.非递归算法74.主菜单程序45.子菜单程序4六、参考文献23一 课题简介:通过这个课题设计主要掌握三种遍历方法,包括前序遍历,中序遍历和后序遍历,以及后续遍历的非递归算法。二 项目设计: 非 递 归 算 法先序遍历中序遍历后序遍历退出程序退出程序后序遍历中序遍历先序遍历递 归 算 法系 统 主 界 面 图1: 系统功能模块图准 备系 统 登 录选择 遍历中 序 遍 历 后 序 遍 历 先 序 遍 历退 出 输出遍历结果 图2:系统存盘功能流程图 三 系统实
3、现系统核心代码:1.二叉树的建立:二叉树的遍历算法需要先建立二叉树,二叉树的建立需要建立栈和数组栈和数组的建立:typedef struct node /*结点定义*/ char data; struct node * lchild, * rchild; BinTreeNode;typedef struct /栈的定义BinTreeNode * ptr;int tag;StackNode;二叉树的建立:BinTreeNode * CreateBinTree (BinTreeNode * Tree )/*,按先序序列建立二叉树,输入并建立一棵二叉树Tree*/ char c;scanf(%c,&
4、c);if(c=&) Tree = NULL;elseTree=(BinTreeNode * )malloc(sizeof(BinTreeNode);Tree-data=c;Tree-lchild= CreateBinTree(Tree-lchild);Tree-rchild= CreateBinTree(Tree-rchild); return(Tree);2.先序遍历:a.递归算法:先序遍历的递归算法:/*二叉树的先序遍历*/void PreOrder ( BinTreeNode *T ) if ( T != NULL ) printf(%c,T-data); PreOrder ( T-l
5、child ); PreOrder ( T-rchild ); b.非递归算法:先序遍历的非递归算法:/*二叉树的先序遍历的非递归算法*/void PreOrderTwo ( BinTreeNode *T ) BinTreeNode *p,*SMax; int top=-1; p=T; /*初始化*/ do while ( p != NULL ) printf(%c,p-data); top+;Stop=p; p=p-lchild; if( top -1 ) /*栈非空*/ p=Stop; top-; /*取栈顶元素,出栈*/ p = p-rchild; while ( p != NULL )
6、 |(top-1); 2.中序遍历:检查该用户是否可以使用该系统,如果没有该用户则重新输入输入,若用户密码输入错误,三次错误时,退出登录系统,并且该用户被冻结。void common_user()/ 普通用户登录char ch;char pass20;char uname20;int i=0;Lab:if(i=3) exit(1);puts(n请输入用户名:);cinuname;for(user *p= head; p!= NULL;p= p-next)if(!strcmp(uname,p-getmingzi()if(p-getstate() =3) cout该账户已经被冻结!n;i+; go
7、to Lab;else break;if(!p)cout该用户不存在,请重新输入!n;i+;goto Lab;int x = 0;coutgetmima1(), pass)while(1)system(cls);int a;coutendlendlendl;cout =欢迎使用本银行=endl;cout * 存 钱 1 *endl;cout * 取 钱 2 *endl;cout * 转 帐 3 *endl;cout * 查 询 4 *endl;cout * 挂 失 5 *endl;cout * 修改密码 6 *endl;cout * 保存信息 7 *endl;cout * 返回上级 0 *en
8、dl;cout *endl;cout请输入您的选择:a;switch(a)case 1:cunqian(); system(cls);break;case 2:quqian();system(cls);break;case 3:zhuanzhang();system(cls);break ;case 4: chaxun();/cout请输入帐号:endl; /查询system(cls);break;case 5:guashi();system(cls);return; case 6: xiugai();system(cls);break;case 7: cunyonghu();cunzhang
9、hu();cunguanli();exit(1);case 0:return;else coutsetstate(p-getstate()+1); /如果密码错误,在以前基础上加状态一并存盘cunyonghu();i+;goto Lab;void display() /打印函数p= head;while(p!= NULL)cout用户名:getmingzi()endl普通密码:getmima1()endl状态:getstate()next;1) 没有此用户:2)用户密码错误:3)密码正确:3.后序遍历:检查该用户是否可以使用本系统,三次密码错误则退出登录系统。void manage() / 管
10、理员char ch;char pass20;char uname20;int i=0;Lab:if(i=3) exit(1);puts(n请输入用户名:);cinuname;for(user *p= head; p!= NULL;p= p-next)if(!strcmp(uname,p-getmingzi()if(p-getstate() 0 ) cout该账户已经被冻结!n;i+; goto Lab;else break;if(!p)cout该用户不存在,请重新输入!n;i+;goto Lab;int x = 0;cout请输入密码:n;while(ch=getch()!= -1 & ch!
11、= r)passx+= ch;putchar(*);passx=0;if(!strcmp(133, pass)while(1)system(cls);int x;coutendlendlendl;cout =欢迎使用本银行=endl;cout * 开 户 1 *endl;cout * 销 户 2 *endl;cout * 查 看 3 *endl;cout * 修改密码 4 *endl;cout * 删除账户 5 *endl;cout * 修改账户状态 6 *endl;cout * 修改用户状态 7 *endl;cout * 保存用户信息 8 *endl;cout * 返回上级 0 *endl;
12、cout *endl;cout请输入您的选择:x;switch(x)case 1: system(cls);kaihu();system(cls);break;case 2:xiaohu(); /销户system(cls);break;case 3:chakan(); / 查询system(cls);break;case 4: xiugai(); /修改密码才system(cls);break;case 5:Delete(); /修改状态system(cls);break;case 6: xiugai1();system(cls); break;case 7: xiugaiyh();syste
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 遍历 递归 算法 41
限制150内