完全二叉数操作演示
1.完全二叉树操作演示要求:
(1)创建完全二叉树(用顺序方式存储)
(2)求二叉树的深度和叶子结点数
(3)实现二叉树的前序、中序、后序和层次遍历。
(4)查找给定结点的双亲、左右孩子。
其他增加功能:
(1)有用户使用错误的提示功能
(2)具有退出功能
2二叉树总体结构设计
对完全二叉数操作演示,主要划分为以下七个模块:
完全二叉树显示:以括号套括号的形式显示完全二叉树。
完全二叉树的节点数和叶子数:根据书中公式计算叶子数,并显示完全二叉树的节点数和叶子数。
完全二叉树的树深:根据书中公式计算树深,并显示完全二叉树的树深。
完全二叉树的前,中,后序遍历:根据程序分别显示二叉树的前,中,后序遍历。
完全二叉树的层次遍历:根据程序分别显示完全二叉树的层次遍历。
查找给定结点的双亲、左右孩子:根据书中公式计算查找给定结点的双亲、左右孩子,并加以显示。
退出程序:谢谢你的使用!
根据需求分析的结果,总体结构如图所示
3.详细设计
3.1数据结构设计
(1)整个程序采用结构体与顺序表相结合的编程方法一共完成了7个功能。在你输入错误时有报错消息。这样使整个程序运行起来更加完整。程序中有若干个子函数被主函数调运执行。由于程序要求二叉树的存储方式为顺序存储,所以在本程序中采用了先进先出的顺序表存储方式。
(2)程序包括的类
Void out(tree&t,int r)是显示二叉树函数
Node()求节点数,
Leaf()求叶子节点数,
Depth() 求树深
Preorder() 先序遍历函数,
Inorder() 中序遍历函数,
Postorder() 后序遍历函数,
leorder() 层次遍历函数;
caidan() 菜单操作页面函数;
sqhz() 查找给定节点的双亲,孩子函数
3.2主要模块设计
主函数 main()
直接以字符数组的方式给二叉树赋值,调用caidan()函数,然后以switch分支语句分别对菜单中的各个函数操作,最后以do-while循环语句结束程序。
树深的函数 Depth()
直接根据节点数算出结果返回值。
查找给定节点的双亲,孩子函数 sqhz()
此函数是程序中比较复杂的函数,函数中是通过节点标志的奇偶性分类求解的,首先用要查找的节点与二叉树中的节点依次比较,如果找到节点则用除2求余的方法判断奇偶,然后根据各自的特点求出节点的双亲和孩子,若找不到此节点则break;结束此操作,重新选择操作。
3.2.1菜单的选择模块
3.2.2查找给定节点的双亲,孩子模块
4运行结果
-
进入菜单界面,显示本程序相关信息。
-
输入1,回车,显示完全二叉树。
-
输入2,回车,显示完全二叉树的节点数和叶子数。
-
输入3,回车,显示完全二叉树的树深。
-
输入4,回车,显示完全二叉树的前,中,后序遍历。如图4-5所示。
-
输入5,回车,显示完全二叉树的层次遍历。
-
输入6,回车,显示查找给定结点的双亲、左右孩子值。
-
输入7,回车,显示“谢谢你的使用!”。
-
输入8,回车,显示“输入错误,请重新选择:”。
-
输入6,回车,p,回车,显示“二叉树中没有此节点,请重新输入:” 。
功能较多,在此不一一展示,如需源码和课程设计报告,欢迎关注与私信!!