数据结构课程设计之-树与二叉树的转换.doc

数据结构课程设计之-树与二叉树的转换课案

衡阳师范学院 《数据结构》课程设计 题 目: 树与二叉树的转换 系 别: 计算机科学系 专 业: 计算机科学与设计 班 级: 1302 学生姓名: 戴志豪 学 号: 指导老师: 赵磊 完成日期: 2015年1月3号 目 录 一.需求分析.…………………………………………………………………3 二.概要设析………………………………………………………………….3 三.详细设计………………………………………………………………….5 的建立………………………………………………………………..5 2.一般树转化成二叉树…………………………………………………..6序遍历树的递归算法………………………………………………..7 4.后序遍历树的递归………………………………………………..7 5.先序遍历树的非递归算法……………………………………………..7序遍历树的非递归算法……………………………………………..8 7.序非递归的算法…………………………………………………..设计与调试分析………………………………………………………….0 五.用户………………………………………………………………….10 六.测试结果………………………………………………………………….11附录程序)………………………………………………………….14总结……………………………………………………………………….20 一.需求分析 本程序的功能是对任意树进行递归前序遍历和后序遍历,以及实现的用到的建立与二叉树的转换算法后序二叉树的递归递归算法序遍历算法 1建立 2*i+1 的值存入左孩子,为2*i+2的存入右孩子。 BiNode creat(),BiNode stree_creat(char *a,int k)。 2一般树转化成二叉树void exchange(),class Tree 3先序遍历树的递归算法 1)访问根结点;(2)先序遍历左子树;(3)先序遍历右子树。void PreOrder(BiNode root)。 4后序遍历树的递归算法 1)后序遍历左子树;(2)后序遍历右子树。(3)访问根结点;void PostOrder(BiNode root)。 5先序遍历树的非递归算法 1)先将根节点进栈,在栈不为空时循环2)出栈p,访问*p若右孩子节点不空将右孩子节点进栈若左不空时其左孩子节点进栈。的非递归算法 一个栈保存需要返回的指针,先扫描根节点所有的左孩子节点并一一进栈,出栈一个节点*b作为当前节点,然后扫描节点的右子树。当节点的左右孩子节点均访问后再访问节点,如此重复操作,直到栈空为止。序的遍历 void LevelOrder(BiNode root)。 详细设计 1树的建立PTree CreatTree(PTree T) { int i=1; int fa,ch; PTNode p; for(i=1;ch!=-1;i++) { printf(输入第%d结点:\n,i); scanf(%d,%d,fa,ch); printf(\n); p.data=ch; p.parent=fa; T.count++; T.node[T.count].data = p.data; T.node[T.count].parent = p.parent; } printf(\n); printf(创建的树具体情况如下:\n); print_ptree(T); return T; 2一般树转换成二叉树BTNode *change(PTree T) { int i,j=0; BTNode p[MAX_TREE_SIZE]; BTNode *ip,*is,*ir,*Tree; ip=(BTNode *)malloc(sizeof(BTNode)); is=(BTNode *)malloc(sizeof(BTNode)); ir=(BTNode *)malloc(sizeof(BTNode)); Tree=(BTNode *)malloc(sizeof(BTNode)); for(i=0;iT.count;i++) { p[i]=GetTreeNode(T.node[i].data); } for(i=1;iT.count;i++) { ip=p[i]; is=p[j]; while(T.node[i].parent!=is-data) { j++

文档评论(0)

1亿VIP精品文档

相关文档