1 / 16

第 6 章 树和二叉树

数据结构讲义. 第 6 章 树和二叉树. — 遍历二叉树. 嘉应学院 数学系. D. L. R. LDR 、 LRD 、 DLR RDL 、 RLD 、 DRL. 6.3 遍历二叉树. 二叉树的遍历 方法 先序遍历:先访问根结点 , 然后分别先序遍历左子树、右子树。 中序遍历:先中序遍历左子树,然后访问根结点,最后中序遍历右子树。 后序遍历:先后序遍历左、右子树,然后访问根结点。 按层次遍历:从上到下、从左到右访问各结点。. A. C. B. D. A. D L R. D L R. >. >. >. B. C.

alize
Télécharger la présentation

第 6 章 树和二叉树

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 数据结构讲义 第6章 树和二叉树 — 遍历二叉树 嘉应学院 数学系

  2. D L R LDR、LRD、DLR RDL、RLD、DRL 6.3 遍历二叉树 • 二叉树的遍历 • 方法 • 先序遍历:先访问根结点,然后分别先序遍历左子树、右子树。 • 中序遍历:先中序遍历左子树,然后访问根结点,最后中序遍历右子树。 • 后序遍历:先后序遍历左、右子树,然后访问根结点。 • 按层次遍历:从上到下、从左到右访问各结点。

  3. A C B D A D L R D L R > > > B C D L R > > D 先序遍历: D L R 先序遍历序列:A B D C

  4. A C B D B L D R L D R > > > A C L D R > > D 中序遍历: L D R 中序遍历序列:B D A C

  5. A C B D L R D L R D B L R D > > > A C > > D 后序遍历: L R D 后序遍历序列: D B C A

  6. - + / a * f e b - c d 先序遍历: + a * b - c d / e f - 中序遍历: a + b * c - d - e / f 后序遍历: a b c d - * + e f / - 层次遍历: - + / a * e f b - c d

  7. A B C 左是空返回 左是空返回 > 右是空返回 T D T 左是空返回 B T D 右是空返回 T printf(B); > A T printf(D); 主程序 pre(T L); printf(A); pre(T L); pre(T R); pre(T L); > pre(T R); T Pre( T ) pre(T R); T C > T printf(C); pre(T L); > pre(T R); T A void preorder(JD *bt) { if(bt!=NULL) { printf("%d\t",bt->data); preorder(bt->lchild); preorder(bt->rchild); } } B C D 返回 返回 返回 返回 先序序列:A B D C 返回

  8. p p p i i P->A P->B P->A (2) A A A A (1) B B B B C C C C D D D D i E E E E F F F F i P->C p=NULL G G G G P->B P->B P->A P->A (3) 访问:C (4) • 非递归算法实现中序遍历

  9. p p i i P->D P->A P->A (5) 访问:C B (6) 访问:C B A A A A B B B B C C C C D D D D i i E E E E F F F F P->E P->D P->D G G G G P->A P->A p p 访问:C B E 访问:C B (8) (7)

  10. p p i P->G i P->D P->D P->A P->A 访问:C B E (9) (10) 访问:C B E G P=NULL A A A A p B B B B C C C C D D D D i E E E E F F F F P->F i G G G G P->A P->A 访问:C B E G D 访问:C B E G D (12) (11)

  11. p i i P->A p=NULL (13) 访问:C B E G D F A (14) 访问:C B E G D F A A A p=NULL B B B C C C D D D E E E F F F G G G i (15) 访问:C B E G D F A 后序遍历非递归算法

  12. A A ^ B ^ C ^ D ^ E ^ F ^ ^ G ^ B C D E F G • 遍历算法应用 • 按先序遍历序列建立二叉树的二叉链表,已知先序序列为: A B C   D E  G   F    二叉树的建立演示

  13. 用队列实现层次遍历 • 可使用一个顺序存储的队列q[100],存放还没有处理的子树的根结点的地址。注意,队首和队尾指针分别指向队首结点和下次进队结点的存放位置。 • 首先把根节点入队。 • 然后访问队头的一个结点,再把该结点非空的左右子树入队。 • 如果队列不空,重复2)。

  14. 示例代码

  15. A B C D E F G 作业 • 当用栈非递归实现树的先序遍历时,写出遍历右边所表示的树的全过程。像讲义中那样,写出遍历每一步栈中的数据。不是写具体的实现代码。

  16. 实验报告 • 按先序遍历序列建立二叉树的二叉链表,已知先序序列为(表示空格):ABCDEGF。并写一个函数treenodes()统计该二叉树的节点个数。如果有可能,写一个输出函数treeprint()用树形结构打印出该二叉树。 • 注意实验报告中不必写完整代码。写树结构定义,已有函数声明, treenodes()和treeprint()的代码,实现过程,心得体会。

More Related