第11讲 树和二叉树(二).

Slides:



Advertisements
Similar presentations
一、算法的基本概念 二、数据结构 三、栈和队列 四、排序方法 五、二叉树
Advertisements

二叉树在树结构的应用中起着非常重要的作用,因为对二叉树的许多操作算法简单,而任何树都可以与二叉树 相互转换,这样就解决了树的
第6章 二叉树和树 前面的章节主要讨论的是线性结构,二叉树和树属于非线性的结构。遍历非线性结构比线性结构要麻烦。
主讲:计算机工程学院 李兰 答疑地点:主教学楼B区213
Visual FoxPro 程序设计 主讲教师:朱扬清 所在单位:电子与信息工程学院 Mobile Phone:
计算机软件技术基础 数据结构与算法(4).
数据结构学习考 复习课(2) 主要内容: 第三部分:树、二叉树、森林.
数据结构——树和二叉树 1/96.
第6章 树和二叉树 树型结构是一类非常重要的非线性结构。直观地,树型结构是以分支关系定义的层次结构。
助教:李伟力 电子科学与技术系 数据结构第二次习题课 助教:李伟力 电子科学与技术系
实用数据结构基础 第6章 树.
第六章 树和二叉树.
第六章 树和二叉树.
第6章 树 数据结构(C++描述).
机械CAD中常用的数据结构.
第6章 树和二叉树 (Tree & Binary Tree)
第5章 树( Tree )和二叉树 5.1 树的基本概念 5.2 二叉树 5.3 遍历二叉树和线索二叉树 5.4 树和森林
CH6 树和二叉树 6.1 树的定义和基本术语 6.2 二叉树 6.3 遍历二叉树和线索二叉树 6.4 树和森林
数据结构 第六章 树与二叉树 深圳大学计算机系 蔡茂国.
第六章 二叉树和树 6.1 二叉树 6.2 二叉树的基本操作与存储实现 6.3 二叉树的遍历 6.4 线索二叉树 6.5 树和森林
第六章 树和森林 1、树、森林的概念 2、二叉树及其表示 3、遍历二叉树和线索二叉树 4、堆 5、树和森林 6、二叉树的计数 7、霍夫曼树
树.
数据结构 第6章 树和二叉树 什么是树和二叉树?? 二叉树的遍历 数据结构.
时政发布 制作:宋虹雷.
树(三) 2012初赛知识点梳理.
第六章 树和二叉树 6.1 树的定义和基本术语 6.2 二叉树 6.3 遍历二叉树和线索二叉树 6.4 树和森林 6.6 赫夫曼树及其应用.
树和二叉树(四).
第6章 树和二叉树 6.1 树的有关概念 6.2 二叉树 6.3 二叉树的遍历 6.4 遍历的应用 6.5 线索二叉树 6.6 树和森林
第六章 树和二叉树.
赵海燕 软件研究所 14 Apr 第5章 树与二叉树 之三 赵海燕 软件研究所 14 Apr
复习.
树和二叉树(三).
Ch.6 树
二叉树 二叉树 遍历 递归.
第六章 二叉树和树 6.1树的基本概念 6.2二叉树 6.3二叉树遍历 6.4线索二叉树 6.5树和森林 6.6树的应用(霍夫曼树及其编码)
第六章 树与二叉树 6.1 树的定义和基本术语 6.2 二叉树 6.3 遍历二叉树和线索二叉树 6.4 树和森林
湖北大学知行学院 教师:涂晓帆 Sunday, December 09, 2018
第六章 树和二叉树.
本章重点难点 重点:顺序查找、二分查找、二叉排序树查找以及散列表查找的基本思想和算法实现。
第六章 树和二叉树.
第8章 树和二叉树 树 二叉树 二叉树设计 二叉树遍历 线索二叉树 哈夫曼树 等价问题 树与二叉树的转换 树的遍历 主要知识点.
教 师:曾晓东 电 话: E_mail: 计算机软件技术基础 教 师:曾晓东 电 话: E_mail:
第5章 树和二叉树 北京师范大学 教育技术学院 杨开城.
数据结构 Data Structure 主讲人:王国军,郑瑾 CSU 中南大学信息院计科系
第5章 树和二叉树 5.1树 5.2二叉树 5.3二叉树的遍历 5.4线索二叉树 5.5树、森林与二叉树的转换 5.6哈夫曼树.
数据结构 Data Structure 主讲人:王国军,郑瑾 CSU 中南大学信息院计科系
第六章 树 2019/1/14.
第六章 树与森林 树和森林的概念 二叉树 (Binary Tree) 二叉树的表示
第五章 树 5.1 树的定义 树是一类重要的非线性数据结构,是以分支关系定义的层次结构 定义
数据结构概论 第6章 树和二叉树 董黎刚 浙江工商大学信电学院.
6.6 Huffman树及其应用 王 玲.
6.3 遍历二叉树和线索二叉树(知识点二) 遍历二叉树 一、问题的提出
第5到第6章的勘误表 注意:这个 c 应改为 d 1、第 92 页 倒数第 7 行:
Tree & Binary Tree.
第一二节 树及二叉树.
无向树和根树.
7.1 广义表的概念 广义表是n(n≥0)个数据元素组成的序列,其中每个数据元素或是单个数据元素(简称原子),或仍然是一个广义表 。
第六章 树和二叉树 £6.1 树 £6.2 二叉树 £6. 3 二叉树的存储结构 £6.4 二叉树的遍历与线索化 £6.1.1 树的定义
第六章 树和二叉树 学习要点 理解树的定义和基本术语,重点了解二叉树的定义、性质、存储结构; 掌握二叉树遍历的递归算法及它的典型运算;
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第六章 树和二叉树.
树和二叉树(一).
第六章 二叉树和树 6.1二叉树 6.2二叉树遍历 6.3树和森林 6.4树的应用.
第5节 树 前两章学习的栈和队列属于线性结构。在这种结构中,数据元素的逻辑位置之间呈线性关系,每一个数据元素通常只有一个前件(除第一个元素外)和一个后件(除最后一个元素外)。在实际生活中,可以用线性结构描述数据元素之间逻辑关系的问题是很广泛的,但也有很多问题不能依靠线性结构来解决,例如家谱、行政组织机构等都是非线性的数据结构。其中树就是一种非线性的数据结构。
树和二叉树(四).
#define RBTREE_RED 0 #define RBTREE_BLACK 1 typedef int dataType; typedef struct treeNode{ dataType key; int color; //red:0.
void HeapSort(int *a, int n) //堆排序 { //建立堆 for(int i = n/2-1; i >= 0; i--) //非叶节点最大序号值为n/2 HeapAdjust(a, i, n); for(int j = n-1; j >
本节内容 1.二叉排序树的定义 2.二叉排序树的查找操作 3.二叉排序树的插入操作 4.二叉排序树的删除操作 5.二叉排序树的总结
本节内容 1. 平衡二叉树的定义 2.平衡化旋转 3.平衡二叉排序树的插入操作 昆山爱达人信息技术有限公司
第五章 树和二叉树.
Presentation transcript:

第11讲 树和二叉树(二)

复习 在二叉树的第 i 层上至多有多少个结点。(i≥1) 深度为 k 的二叉树上至多含多少个结点(k≥1)

教学目标 掌握二叉树的先序、中序、后序遍历算法 掌握二叉树的建立算法 3/ 计算机科学与技术系 信息与教育技术中心

问题的提出 定义:顺着某一条搜索路径访问二叉树中的结点,使得每个结点均被访问一次,而且仅被访问一次。 作用: 遍历的目的是线性化,使二叉树中的结点能够按照某种次序排列在一个线性队列上,便于处理。

问题的提出 线性结构的遍历:因为每个结点均只有一个后继,所以只有一条搜索路径。 二叉树的遍历:二叉树是非线性结构,每个结点有两个后继,则存在如何遍历即按什么样的搜索路径进行遍历的问题。

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

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

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

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

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

例:已知一棵二叉树的中序序列和后序序列分别是BDCEAFHG 和 DECBHGFA,请画出这棵二叉树。 分析: ①由后序遍历特征,根结点必在后序序列尾部(即A); ②由中序遍历特征,根结点必在其中间,而且其左部必全部是左子树子孙(即BDCE),其右部必全部是右子树子孙(即FHG); ③继而,根据后序中的DECB子树可确定B为A的左孩子,根据HGF子串可确定F为A的右孩子;以此类推。

中序遍历:B D C E A F H G 后序遍历:D E C B H G F A

先序遍历 void preorder(bitree *bt) { if(bt!=NULL) 结点类型: typedef struct BiTNode{  TElemType data;  struct BiTNode *lchild;  struct BiTNode *rchild; } bitree; void preorder(bitree *bt) { if(bt!=NULL) { printf("%d ",bt->data); preorder(bt->lchild); preorder(bt->rchild); }

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

中序遍历 void inorder(bitree *bt) { if(bt!=NULL) { inorder(bt->lchild); printf("%d ",bt->data); inorder(bt->rchild); }

后序遍历 void postorder(bitree *bt) { if(bt!=NULL) { postorder(bt->lchild); postorder(bt->rchild); printf("%d ",bt->data); }

中序非递归算法 A B C D E F G P i P->A (1) A B C D E F G P i P->A P->B (2) A B C D E F G P i P->A P->B P->C (3) P=NULL A B C D E F G i P->A P->B 访问:C (4)

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

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

A B C D E F G i 访问:C B E G D F A P (14) A B C D E F G i P->A 访问:C B E G D F P=NULL (13) A B C D E F G i 访问:C B E G D F A P=NULL (15)

a c b e d void inorder(bitree *bt) { int i=0; bitree *P,*s[M]; P=bt; do { while(P!=NULL) { s[i++]=P; P=P->lchild; } if(i>0) { P=s[--i]; printf("%d\t",P->data); P=P->rchild; }while(i>0||P!=NULL); a b c d e

二叉树的构造 按先序遍历序列建立二叉树的二叉链表,已知先序序列为: A B C 0 0 D E 0 G 0 0 F 0 0 0 A B C

二叉树的构造算法 bitree *creatbitree() { bitree *t; char ch; ch = getchar(); if(ch == ‘0’ ) t=NULL; else { t = (bitree *) malloc(sizeof(bitree)); t->data = ch; t->lchild = creatbitree(); t->rchild = creatbitree(); } return t;

作业 (1)根据二叉树的定义,具有三个结点的二叉树有5种不同的形态,请将它们分别画出。 (2)已知一棵 二叉树的先序遍历序列为ABDEHCFGI,中序遍历序列为DHEBFIGCA,试画出该二叉树,并给出该二叉树的前序序列。 (3)编写程序实现统计二叉树中叶子节点的个数。 实验四:二叉树的操作及应用