实验第二次.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验第二次

实验-第二次作业 实验题目 编写一个完整的程序,实现二叉树的构造及中序线索化算法,并在主函数中举出应用实例. 2.需求分析 【1】.程序的功能:按照主函数中的策略创建一棵二叉树,接着将该树实现线索化,然后按照中序遍历的遍历方式将二叉树线索化   【2】.输入输出要求:将二叉树的节点值按照一定的顺序进行输入,最终程序按照中序遍历的方式将二叉树的节点值进行输出,在本题中节点元素数组设为是按照5,6,4,8,2,3,7,1,9顺序进行输入的。即:已知二叉树结点值输入的数据顺序是5,6,4,8,2,3,7,1,9;按照以下策略创建二叉树并将其线索化,然后按照中序遍历的方式进行输出。 二叉树的创建策略是:   【1.1】将第一个要创建的元素插入成为根节点。将元素值与结点值比较,如果元素值大于结点值,将此元素送往结点的右儿子结点,如果右儿子结点不是空的,需要重复比较,否则创建结点将元素值插入。 【1.2】如果元素值小于结点值,将此元素送往结点的左儿子结点,如果左儿子结点不是空的,需要重复比较,否则创建结点将此元素值插入。 算法思想: 要实现本题的要求,首先要创建一棵二叉树,该二叉树的创建策略其实就是搜索二叉树的创建原则,当数组元素大于节点元素时,则数组元素应插在当前节点的右分支上,若当前节点的右儿子为空,直接插入,否则一次依次往下比较;当数组元素小于当前节点元素时,应当将其插在当前节点的左分支上,若当前节点的左儿子为空,则直接插入,否则依次比较下去直至找到插入的位置。  在创建好二叉树以后,便要对二叉树进行线索化,根据二叉树线索化的思想,在中序线索化的过程中,对于内节点,其前驱节点是其左子树的最右结点,其后继结点是右子树的最左节点;对于叶子节点,最左儿子的前驱为空,而最右叶子节点的后继结点为空。 线索化以后,则需对其进行中序遍历,然后对其进行输出即可。 5.数据结构 typedef struct node /*结点结构体*/    { TreeNode left;/*左指针变量*/ int ltag;/*左线索变量*/ int num;/*节点元素*/ int rtag;/*右线索变量*/ TreeNode right;/*右指针变量*/    }Node 6. 模块化    创建一个新的二叉树节点NewNode()    创建一个大小为size空堆栈StackInit(int size)    节点出栈Pop(),入栈操作Push()    创建一棵二叉树CreatTree(int data[],int n,Tree T)    二叉树线索化thread(Tree T)    二叉树的中序遍历Inorder(Tree T) 程序流程图: 8. 源程序 #includestdio.h typedef struct node*TreeNode; typedef struct node /*结点结构体*/  { TreeNode left;/*左指针变量*/ int ltag;/*左线索变量*/ int num;/*节点元素*/ int rtag;/*右线索变量*/ TreeNode right;/*右指针变量*/  }Node; typedef struct astack*Stack; typedef struct astack /*堆栈结构体,用数组实现的*/  { int top; int maxtop; TreeNode *data;   }Astack; typedef struct llist*Tree; typedef struct llist/*二叉树结构体*/   { TreeNode boot;    }Llist; /* 创建一个新的二叉树节点 */ TreeNode NewNode()   { TreeNode p=(TreeNode)malloc(sizeof(Node)); p-left=p-right=NULL; p-ltag=p-num=p-rtag=0; return p;   } /* 创建一个大小为size的堆栈 */ Stack StackInit(int size) { Stack S=(Stack)malloc(sizeof*S); S-data=(TreeNode)malloc(size*sizeof(TreeNode));/*为数组data分配内存空间S-maxtop=size; S-top=-1; return S; }/*入栈操作 */ void Push(

文档评论(0)

ranfand + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档