《二叉树22741967》-精品课件(公开).pptVIP

  • 1
  • 0
  • 约1.2万字
  • 约 84页
  • 2018-12-25 发布于广西
  • 举报
第六章 树和二叉树 树的定义和术语 二叉树 遍历二叉树 树和森林 霍夫曼树 树的基本术语 树的ADT定义 ADT Tree{ …. 基本操作P: InitTree(T); …. Value(T,cur_e); Assign(T,cur_e,value); Parent(T,cur_e); LeftChild(T,cur_e); …. InsertChild(T,p,i,c); //插入c为T中p所指结点的第i棵子树 DeleteChild(T,p,i); //删除T中p所指结点的第i棵子树 TraverseTree(T,Visit()); //树的遍历 }ADT Tree 二叉树的ADT定义 ADT BinaryTree{ …. 基本操作P: InitBiTree(T); …. Value(T,e); Assign(T,e,value); Parent(T,e); LeftChild(T,e); …. InsertChild(T,p,LR,c); 初始条件:二叉树T存在,p指向T中某个结点,LR为0和1,非空二叉 树c与T不相交且右子树为空 操作结果:根据LR为0或1,插入c为T中p所指结点的左或右子树。 P所指结点的原有左或右子树则成为c的右子树 性质2 深度为 k 的二叉树至多有 2 k-1个结点(k ? 1)。 证明: 由性质1可见,深度为k的二叉树的最大结点数为 二叉树的存储结构 遍历二叉树 定义:树的遍历就是按某种次序访问树中的结点,要求每个结点访问一次且仅访问一次。 中序遍历 (InOrder Traversal) 中序遍历二叉树算法的定义: 若二叉树为空,则空操作; 否则 中序遍历左子树 (L); 访问根结点 (D); 中序遍历右子树 (R)。 遍历结果 a + b * c - d - e / f 先序遍历 (PreOrder Traversal) 先序遍历二叉树算法的定义: 若二叉树为空,则空操作; 否则 访问根结点 (D); 先序遍历左子树 (L); 先序遍历右子树 (R)。 遍历结果 ----波兰式(前缀表示): - + a * b - c d / e f 后序遍历 (PostOrder Traversal) 后序遍历二叉树算法的定义: 若二叉树为空,则空操作; 否则 后序遍历左子树 (L); 后序遍历右子树 (R); 访问根结点 (D)。 遍历结果----逆波兰式(后缀表示): a b c d - * + e f / - 二叉树遍历应用 以递归方式建立二叉树。 输入结点值的顺序必须对应二叉树结点先序遍历的顺序。并约定以输入序列中不可能出现的值作为空结点的值以结束递归, 此值在RefValue中。例如用“@”或用“”表示字符序列或正整数序列空结点。 2. 计算二叉树结点个数(递归算法) 作 业 7 思考题: 二叉树的先序及后序遍历的非递归算法(习题集6.37,6.38)。 作业:习题集 6.27 (page 41) , 6.47 (page 43), 由二叉树的前序序列和中序序列可唯一地确定一棵二叉树。(6.31) 例, 前序序列 { ABHFDECKG } 和中序序列 { HBDFAEKCG }, 构造二叉树过程如下: 树和森林 树的存储结构 森林与二叉树的转换 树和森林的遍历 树的存储结构 用双亲表示实现的树定义 孩子表示法: 1.多重链表 每个结点有多个指针域分别指向子树的根结点。 2. 孩子链表 把每个结点的孩子结点组织为一个单链表,n个单链表的头指针组成一个线性表。 (图6.14) 用孩子兄弟表示实现的树定义 树和森林的遍历 树的遍历 (深度优先遍历) 先根次序遍历 后根次序遍历 当树非空时 访问根结点 依次先根遍历根的各棵 子树 树先根遍历 ABEFCDG 对应二叉树前序遍历 ABEFCDG 树的先根遍历可以借用二叉树的前

文档评论(0)

1亿VIP精品文档

相关文档