- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言的全面介绍9
void inorder(Struct node *root) {Struct node *p; p=root; if (p!=NULL) { inorder(p-lchild); coutp-data ; inorder(p-rchild); } } 2.非递归遍历(略) 10.3.3 后根遍历 所谓后根遍历,就是根在最后,即先左子树,然后右子树,最后根结点。 1.递归遍历 后根遍历二叉树的递归遍历算法描述为: 若二叉树为空,则算法结束;否则: (1)后根遍历左子树; (2)后根遍历右子树; (3)访问根结点。 算法如下: void postorder(Struct node *root) {Struct node *p; p=root; if(p!=NULL) { postorder (p-lchild); postorder (p-rchild); coutp-data ; } } 2.非递归遍历(略) 例如,可以利用上面介绍的遍历算法,写出如图10-9所示的二叉树的三种遍历序列为: 先序遍历序列:ABDGCEFH 中序遍历序列:BGDAECFH 后序遍历序列:GDBEHFCA 图10-9 一棵二叉树 例,已知一个二叉树的后序遍历结果和中序遍历结果分别为:DGHEBIFCA和DBGEHACIF,试确定这个二叉树。(p167) 注意: 前序和中序得到的二叉树唯一。 后序和中序得到的二叉树唯一。 前序和后序得到的二叉树不唯一。 10.4 树、森林与二叉树 10.4.1 树的存储结构 1.双亲表示法 它是以一组连续的存储单元来存放树中的结点,每个结点有两个域:一个是data域,存放结点信息,另一个是parent域,用来存放双亲的位置(指针)。 用C描述如下: #define maxsize 100 //maxsize表示数组的最大长度 struct node { elemtype data; int parent; }; Struct node a[maxsize]; // 定义一维数组存放树中结点 该结构的具体描述见图10-10。 (a)树的结构 (b)树的双亲表示法 图10-10 树的双亲表示法示意图 2.孩子表示法 将一个结点的所有孩子链接成一个单链表形式,而树中有若干个结点,故有若干个单链表,每个单链表有一个表头结点,所有表头结点用一个数组来描述,具体描述参见图10-11,该存储结构的形式用C描述如下: #define maxsize 100 //maxsize为数组的最大容量 Struct node1 { int clild; //孩子序号 struct node1 *next; //下一个孩子指针 }; Struct node { elemtype dada; //结点信息 struct node1 *next1; //头指针 }; Struct node a[maxsize]; 图10-11 树(图10-10(a)中树)的孩子表示法示意图 3.双亲孩子表示法 将第1、2两种方法结合起来,则得到双亲孩子表示法,具体参见图10-12。 图10-12 树的双亲孩子表示法示意图 4.孩子兄弟表示法 类似于二叉链表,但第一根链指向第一个孩子,第二根链指向下一个兄弟。将图10-10(a)的树用孩子兄弟表示法表示,如图10-13所示。 图10-13 树的孩子兄弟表示法示意图 从上面提到的树的几种表示方法可知,双亲表示法求指定结点的双亲结点方便,求孩子结点不方便,孩子表示法求指定结点的孩子结点方便,求双亲结点不方便,孩子兄弟表示法求孩子结点和兄弟结点都方便。因此,在实际应用中,可根据问题的不同要求,选用不同的存储结构。 10.4.2 树、森林和二叉树的转换 1.树转换成二叉树 可以分为三步: (1)连线 指相邻兄弟之间连线。 (2)抹线 指抹掉双亲与除左孩子外其他孩子之间的连线。 (3)旋转 只需将树作适当的旋转。具体实现过程见图10-14。 图10-14 树转换成二叉树示意图 2.森林转换成二叉树 可以分为两步: (1)将森林中每一棵树分别转换成二叉树 这在刚才的树转换成二叉树中已经介绍过。 (2)合并 使第n棵二叉树接入到第n-1棵二叉树的根结点的右边并成为它的右子树,第n-1棵二叉树接入到第n-2棵二叉树的根结点的右边并成为它的右子树,……,第
您可能关注的文档
最近下载
- 融合新闻:通往未来新闻之路-暨南大学-中国大学MOOC慕课答案.pdf VIP
- 新媒体文化十二讲_暨南大学中国大学mooc课后章节答案期末考试题库2023年.docx VIP
- 《倍的认识》作业设计.pdf VIP
- 二次根式单元测试.doc VIP
- 806机械设计-四川l轻化工大学2022年硕士研究生考试自命试题.pdf VIP
- 计量经济学课程论文.doc VIP
- 《计量经济学》课程论文.docx VIP
- 医药营销团队绩效考核方案.docx VIP
- 钢筋混凝土三通井工程量计算表.xlsx VIP
- 新媒体文化十二讲(暨南大学)中国大学MOOC慕课章节测验答案(课程ID:1206589806).pdf VIP
原创力文档


文档评论(0)