二叉树的存储结构(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
您可能关注的文档
- 表面质量7.2.ppt
- 表面质量7.1.ppt
- 就业推荐表2011060762935077.doc
- 高中语文 第二单元之《陈情表》课件 新人教版必修5.ppt
- 103022_水电安装自动计算表格.xls
- 自然灾害灾情数据统计基础.ppt
- 水电安装自动计算表格.xls
- 项目4 电能表的使用.ppt
- 数据的波动极差.ppt
- 相同表现手法的不同产品广告作品.ppt
- 监事会职责与工作制度规范.docx
- 幼儿园安全法律法规案例分析.docx
- 分公司财务管理制度范本.docx
- 2026上半年贵州事业单位联考贵州省住房和城乡建设厅招聘16人备考题库含答案详解(夺分金卷).docx
- 2026上半年贵州事业单位联考汇川区招聘216人备考题库附答案详解(达标题).docx
- 2026上半年贵州事业单位联考贵州民族大学招聘52人备考题库附参考答案详解(巩固).docx
- 2024年护师类之护师(初级)能力提升试卷A卷附答案.pdf
- 物理试卷+答案【黑吉辽蒙卷】【高二】黑龙江省龙东十校联盟2025-2026学年高二上学期10月月考.docx
- 富士康实施CSD-TFI30A:总账科目余额与管理.pdf
- 第五单元故事工作表:寻找波莉.pdf
原创力文档

文档评论(0)