6-树和二叉树.ppt

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

二叉树的存储结构(P126) 1. 顺序存储结构(数组表示) #define MAX_TREE_SIZE 100 typedef TElemType SqBiTree[MAX_TREE_SIZE]; SqBiTree bt; 6.3 遍历二叉树 (Traversing Binary Tree) p144 所谓树的遍历,就是按某种次序访问树中的结点,要求每个结点访问一次且仅访问一次。 遍历的结果:产生一个关于结点的线性序列。 设访问根结点记作 D 遍历根的左子树记作 L 遍历根的右子树记作 R 则可能的遍历次序有 先序 DLR DRL 逆先序 中序 LDR RDL 逆中序 后序 LRD RLD 逆后序 先序遍历 (Preorder Traversal) 先序遍历二叉树算法的框架是 若二叉树为空,则空操作; 否则 访问根结点 (D); 先序遍历左子树 (L); 先序遍历右子树 (R)。 中序遍历 (Inorder Traversal) 中序遍历二叉树算法的框架是: 若二叉树为空,则空操作; 否则 中序遍历左子树 (L); 访问根结点 (D); 中序遍历右子树 (R)。 遍历结果(中缀表达式) a + b * c - d - e / f 后序遍历 (Postorder Traversal) 后序遍历二叉树算法的框架是 若二叉树为空,则空操作; 否则 后序遍历左子树 (L); 后序遍历右子树 (R); 访问根结点 (D)。 由二叉树的先序序列和中序序列可唯一地确定一棵二叉树。例, 先序序列 { ABHFDECKG } 和中序序列 { HBDFAEKCG }, 构造二叉树过程如下: 遍历二叉树的非递归算法 先序遍历:算法1,将右子树根结点 入栈,(栈所需最大容量为n/2+1);算法2将根结点入栈 中序遍历:在遍历左子树之前,先把根结点入栈,当左子树遍历结束后,从栈中弹出,访问,再遍历右子树 后序遍历: 1)设定一个指针,指向最近访问过的结点。在退栈取出根结点时,需判断:若根结点的右子树为空,或它的右子树非空,但已遍历完毕,即它的右子树根结点恰好是最近一次访问过的结点时,应该遍历该根结点。反之,该根结点应重新入栈,先遍历它的右子树。 2)还可同时设定一个标记,指示该根结点是第一次还是第二次入栈 二叉树的显示输出 void PrintBiTree(BiTree T,int n) { int i; char ch= ; if (T) { PrintBiTree(T-rchild,n+1); for (i=1;i=n;++i) {printf(%5c,ch);} printf(%c\n, T-data); PrintBiTree(T-lchild,n+1); } } 说明: 1)遍历的第一个和最后一个结点 第一个结点: 先序:根结点; 中序:沿着左链走,找到一个没有左孩子的结点; 后序:从根结点出发,沿着左链走,找到一个既没有左孩子又没有右孩子的结点。 最后一个结点: 中序:从根结点出发,沿着右链走,找到一个没有右孩子的结点; 后序:根结点。 先序:从根结点出发,沿着右链走,找到一个没有右孩子的结点;如果该结点有左孩子,再沿着其左孩子的右链走,以此类推,直到找到一个没有孩子的结点 求中序的第一个结点的算法: P=T; while (P-lchild) P=P-lchild; printf(P-data); 求中序的最后一个结点的算法: P=T; while(P-rchild) P=P-rchild; Printf(P-data); 2)先序+中序 或 后序+中序均可唯一地确定一棵二叉树 3)二叉树的二叉链表存储结构中,有n+1个指针域未利用,已经使用的有n-1个指针域,共有2n个指针域 遍历二叉树的应用 将未线索过的二叉树给予线索——在遍历的前提下,按照先、中、后序中的一种 中序线索化 后继线索化——处理前驱结点 a. 如果无前驱结点,则不必加线索 b. 如果前驱结点的右指针域为非空,也不必加线索 c. 如果前驱结点的右指针域为空,则把当前结点的指针值赋给前驱结点的右指针域。 6.4 树和森林 2)常用的其他几种存储结构 双亲表示法 用结构数组——树的顺序存储方式 类型定义: 找双亲方便,找孩子难 孩子链表表示法 顺序和链式结合的表示方法 找孩子方便,找双亲难 孩子兄弟表示法 找孩子容易,若增加pa

文档评论(0)

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

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

1亿VIP精品文档

相关文档