树形结构-数据结构.ppt

  1. 1、本文档共153页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
树形结构-数据结构

D B A D出栈,访问D,右孩子G入栈;G左孩子空; 先扫描(并非访问)根结点的所有左结点并将它们一一入栈,然后出栈一个结点,显然该结点没有左孩子或者左孩子结点已访问过,访问它。然后扫描该结点的右孩子结点及右孩子结点的所有左孩子结点并一一入栈;然后在栈非空时出栈一个结点,…… G B A G出栈,访问G,G右孩子空; B A B出栈,访问B,B右孩子空; A A出栈,访问A,A右孩子C入栈;C左孩子链E入栈; E C E出栈,访问E,E右孩子空; C C出栈,访问C,C右孩子F入栈; F F出栈,访问F,F右孩子空; 空栈,结束。 void InOrder1(BTNode *b ) { BTNode *st[MaxSize], *p; int top=-1; // 设置栈为空栈 if (b!=NULL) // 当二叉树是非空时 { p=b; // 从根结点开始 while ( top-1 | | p!=NULL ) { while ( p!=NULL ) // 将*p及其所有左结点入栈 { top++; st[top]=b; p=p-lchild; } if ( top-1 ) { p= st[top]; top--; // 出栈一个结点*p printf(“%c”, p-data); // 输出结点*p p=p-rchild; // 扫描*p的右孩子 } } // 继续下次循环 } } 后序遍历非递归算法 方法:根据后序遍历的特点设计非递归算法。 (略) 7.5.4 二叉树遍历的层次遍历算法 按层次遍历二叉树: 从第1层开始,逐层进行,每层从左到右访问结点。 ABCDEFG 层次遍历算法要用到一个队列qu来实现: 先将根入队列。 在队列非空时循环做:从队列出列一个结点*p, 访问它;若它有左孩子结点,将左孩子结点入队列;若它有右孩子结点,将右孩子结点入队列; 层次遍历算法要用到一个队列qu来实现: 1)先将根结点入队列。 2)在队列非空时循环做: 从队列出列一个结点*p, 访问它; 若它有左孩子结点,将左孩子结点入队列; 若它有右孩子结点,将右孩子结点入队列; 如此操作直到队列空为止。 A A出列,访问A,左孩子B入列;右孩子C入列; 先将根入队列。 在队列非空时循环做:从队列出列一个结点*p, 访问它;若它有左孩子结点,将左孩子结点入队列;若它有右孩子结点,将右孩子结点入队列; C B B出列,访问B,左孩子D入列,右孩子空; D C C出列,访问C,左孩子E入列,右孩子F入列; F E D D出列,访问D,左孩子空;右孩子G入列; G F E E出列,访问E,左孩子空;右孩子空; 先将根入队列。 在队列非空时循环做:从队列出列一个结点*p, 访问它;若它有左孩子结点,将左孩子结点入队列;若它有右孩子结点,将右孩子结点入队列; G F F出列,访问F,左孩子空,右孩子空; G G出列,访问G,左孩子空,右孩子空; 队列空,完毕。 void LevelOrder(BTNode *b) { BTNode *p; BTNode *qu[MaxSize]; int front=-1, rear=-1; // 队列设置为空 qu[++rear]=b; // 根结点入队列 while (front!=rear) // 只要队列非空,循环: { front=(front+1)%MaxSize; p=qu[front];

文档评论(0)

zhuliyan1314 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档