- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.4二叉树的遍历.ppt
void Preorder (BiTree T, void ( *visit)(TElemType e)) { // 先序遍历二叉树 if (T) { (*visit)(T-data); // 访问根结点 Preorder(T-lchild, visit); // 遍历左子树 Preorder(T-rchild, visit); // 遍历右子树 } } //PreorderTraverse 同理,中序遍历如下: void InOrderTraverse(BiTreeT, void(* visit)(TElemType)){ if(T){ InOrderTraverse(T-lchild,visit); (*visit)(T-data); InOrderTraverse(T-rchild,visit); } } 四、中序遍历算法的非递归描述 BiTNode *GoFarLeft(BiTree T, Stack S){ if(!T) return NULL; while(T-lchild){ Push(S, T); T=T-lchild; } return T; }//找到T树中最左孩子的指针,用指针T返回 //非递归中序遍历的算法 void InOrderTraverse(BiTree T, void(*visit)(TElemType e)){ Stack S; t=GoFarLeft(T,S); //找到最左下的结点 while(t) { visit(t-data); if(t-rchild) t=GoFarLeft(t-rchild, S); else if(!StackEmpty(S)) //栈不空时退栈 t=Pop(S); else t=NULL; //栈空表明遍历结束 } 五、建立二叉树的存储结构 不同的定义方法相应有不同的存储结构的建立算法 课堂作业 假设一棵二叉树的先序序列为EBADCFHGIKJ中序序列为ABCDEFGHIJK,请画出该树。 假设一棵二叉树的中序序列为DCBGEAHFIJK后序序列为DCEGBFHKJIA,请画出该树。 复习题 一棵完全二叉树上有1001个结点,其中叶子结点的个数是()。 250 500 254 505 以上答案都不是 答案:E 一、已知一棵完全二叉树共有892个结点,试求: 1、树的高度。 2、叶子结点数 3、单支结点数 4、最后一个非终端结点的序号。 找出所有满足下列条件的二叉树: 它们在先序遍历和中序遍历时,得到的结点访问序列相同; 它们在后序遍历和中序遍历时,得到的结点访问序列相同; 它们在先序遍历和后序遍历时,得到的结点访问序列相同; 只有根节点;每个结点只有右子树。 只有根节点;每个结点只有左子树。 只有根节点; * * 6.4 二叉树的遍历 一、问题的提出 二、先左后右的遍历算法 三、算法的递归描述 四、中序遍历算法的非递归描述 五、遍历算法的应用举例 顺着某一条搜索路径巡访二叉树 中的结点,使得每个结点均被访问一 次,而且仅被访问一次。 一、问题的提出 “访问”的含义可以很广,如:输出结 点的信息等。 “遍历”是任何类型均有的操作, 对线性结构而言,只有一条搜索路 径(因为每个结点均只有一个后继), 故不需要另加讨论。而二叉树是非 线性结构, 每个结点有两个后继, 则存在如何遍历即按什么样的搜索 路径遍历的问题。 对“二叉树”而言,可以有三条搜索路径: 1.先上后下的按层次遍历; 2.先左(子树)后右(子树)的遍历; 3.先右(子树)后左(子树)的遍历。 二、先左后右的遍历算法 先(根)序的遍历算法 中(根)序的遍历算法 后(根)序的遍历算法 若二叉树为空树,则空操作;否则, (1)访问根结点; (2)先序遍历左子树; (3)先序遍历右子树。 先(根)序的遍历算法: 1 2 4 5 3 6 124536 若二叉树为空树,则空操作;否则, (1)中序遍历左子树; (2)访问根结点; (3)中序遍历右子树。 中(根)序的遍历算法: 1
文档评论(0)