预览加载中,请您耐心等待几秒...
1/2
2/2

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

实验7二叉树其它操作实验目的1.在二叉树基本操作的基础上掌握对二叉树的一些其它操作的具体实现方法。2.掌握构造哈夫曼树以及哈夫曼编码的方法。实验内容程序1已知二叉树的前序遍历序列和中序遍历序列,编写可唯一确定该二叉树的程序。设计要求:在程序中构造两个子程序分别为voidBuildSub(intPreStart,intPreEnd,intInStart,intInEnd,BitTree*root)/*根据输入的前序和中序序列确定二叉树,PreStart和PreEnd分别为前序遍历的边界*//*InStart和InEnd分别为中序遍历的边界*/voidBinTraversepost(BitTreeBT)/*后序遍历二叉树*/程序2有一二叉链表,按后序遍历时输出的结点顺序为a1,a2,…,an。试编写一算法,要求输出后序序列的逆序an,an-1,…,a2,a1。设计要求:在程序中构造四个子程序分别为voidBinTreeInit()/*初始化二叉树,即把树根指针置空*/voidBinTreeCreat(BitTree*BT)/*按先序次序建立一个二叉树*/voidBinTraverse(BitTreeBT)/*与后序遍历相反的遍历序列*/voidBinTraversepost(BitTreeBT)/*后序遍历二叉树*/程序3试分别编写二叉树前序遍历、中序遍历、后序遍历在二叉链表存储结构上的非递归算法。设计要求:在程序中构造五个子程序分别为voidBinTreeInit()/*初始化二叉树,即把树根指针置空*/voidBinTreeCreat(BitTree*BT)/*按前序次序建立一个二叉树*/voidpreorder_stack(BitTreeT)/*前序遍历二叉树的非递归算法*/voidinorder_stack(BitTreeT)/*中序遍历二叉树的非递归算法*/voidpostorder_stack(BitTreeT)/*后序遍历二叉树的非递归算法*/程序4一棵n个结点的完全二叉树存放在二叉树的顺序存储结构中,试编写非递归算法对该二叉树进行前序遍历。设计要求:在程序中构造两个子程序分别为voidCreateBitree_SqList(BitTree*T,inti)/*根据顺序存储结构建立二叉链表*/voidBinTraverse(BitTreeBT)/*前序遍历二叉树*/程序5编写递归算法将二叉树中所有结点的左、右子树交换。设计要求:在程序中构造三个子程序分别为voidpreorder(Bitreet)/*前序遍历二叉树*/voidcreatebitree(Bitree*t)/*按前序次序建立一个二叉树*/voidchange(Bitree*t)/*交换二叉树的左右子树*/程序6二叉树采用二叉链表存储,设计按层次遍历二叉树的算法。设计要求:在程序中构造两个子程序分别为voidBinTreeCreat(BitTree*BT)/*按前序次序建立一个二叉树*/voidlayorder(BitTreeT)/*按层次遍历二叉树*/程序7哈夫曼树和哈夫曼编码:从终端输入若干个字符,统计字符出现的频率,将字符出现的频率作为结点的权值,建立哈夫曼树,然后对各字符进行哈夫曼编码。最后打印哈夫曼树和对应的哈夫曼编码。设计要求:在程序中构造四个子程序为intfreqchar(char*text,HTree*t)/*统计字符出现的频率*/intcreatehtree(HTree*t)/*根据字符出现的频率建立哈夫曼树*/voidcoding(HTree*t,inthead_i,char*code)/*对哈夫曼树进行编码*/voidprinthtree(HTree*t,inthead_i,intdeep,int*path)/*中序打印树*/