12二叉树的存储结构和遍历.ppt
《12二叉树的存储结构和遍历.ppt》由会员分享,可在线阅读,更多相关《12二叉树的存储结构和遍历.ppt(64页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、二叉树的存储结构和遍历二叉树的存储结构和遍历二叉树的遍历二叉树的存储结构小结和作业顺序存储顺序存储二叉链表二叉链表三叉链表三叉链表链式链式存储存储问题的提出问题的提出递归遍历算法递归遍历算法非递归遍历算法非递归遍历算法复习双亲链表双亲链表1、一个有、一个有n个结点的满二叉树的叶子结点有多少?个结点的满二叉树的叶子结点有多少?2、完全二叉树的分支为、完全二叉树的分支为1的节点有多少?的节点有多少?3、一个有、一个有n个结点的二叉树最大深度是多少?最少个结点的二叉树最大深度是多少?最少深度是多少?深度是多少?4、二叉树中、二叉树中n0=50,n2为多少?为多少?n1至少为多少?至少为多少?复习复习
2、二叉树的顺序存储二叉树的顺序存储顺序存储是用一组连续的存储单元存放数据顺序存储要求数据是线性结构二叉树是非线性结构如何把二叉树转换为线性结构,而且保持结点之间的父/子关系?二叉树的顺序存储二叉树的顺序存储ACGBDEFK LHJIM NO123456789101112131415满二叉树:从上到下,从左往右依次编号二叉树的顺序存储二叉树的顺序存储 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15数组的下标,也是结点的编号 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15A B CEFDGH IJK LM N O二叉树的顺序存储二叉树的顺序存储
3、ACGBDEFHJI12345678910完全二叉树:从上到下,从左往右依次编号 0 1 2 3 4 5 6 7 8 9 10 A B CEFDGH IJ二叉树的顺序存储二叉树的顺序存储ABDCEF一般的二叉树:想象成一个完全二叉树一般的二叉树:想象成一个完全二叉树ABDCEF00000000二叉树的顺序存储二叉树的顺序存储ABDCEF000000001234567891011121314二叉树的顺序存储二叉树的顺序存储ABDCEF1253714二叉树的顺序存储二叉树的顺序存储ABDCEF1253714 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A B CDEF 0
4、 1 2 3 4 5 6 7 8 9 10 11 12 13 14 11110010000001如何知道有无数据?#define MAX_TREE_SIZE 100 /二叉树的最大结点数二叉树的最大结点数typedef TElemType SqBiTreeMAX_TREE_SIZE;/1号单元存储根结点号单元存储根结点SqBiTree bt;二叉树的顺序存储二叉树的顺序存储适合完全二叉树(书上的定义0号单元?)#define MAX_TREE_SIZE 100 /二叉树的最大结点数二叉树的最大结点数typedef struct TElemType dataMAX_TREE_SIZE;char
5、flagMAX_TREE_SIZE;SqBiTree;二叉树的顺序存储二叉树的顺序存储适用于一般的二叉树链式存储链式存储二叉链表二叉链表lchild data rchild二叉链表的结点结构二叉链表的结点结构:左指针域,指向当左指针域,指向当前结点的左子树前结点的左子树数据域,存储当前数据域,存储当前结点的取值信息结点的取值信息右指针域,指向当右指针域,指向当前结点的右子树前结点的右子树指向二叉树根结点指向二叉树根结点头指针:头指针:前述二叉树的二叉链表如下所示:前述二叉树的二叉链表如下所示:AFECDBroot链式存储链式存储二叉链表二叉链表a1a2a3LABDCEFtypedef stru
6、ct BiTNode /结点结构结点结构 TElemType data;struct BiTNode *lchild,*rchild;/左右孩子指针左右孩子指针 BiTNode,*BiTree;lchild data rchild结点结构结点结构:二叉链表的二叉链表的C C 语言类型描述如下语言类型描述如下:左指针域左指针域数据域数据域右指针域右指针域链式存储链式存储二叉链表二叉链表parent lchild data rchild三叉链表的结点结构三叉链表的结点结构:指向双亲结指向双亲结点的指针域点的指针域左指针域左指针域数据域数据域右指针域右指针域链式存储链式存储三叉链表三叉链表rootA
7、EFDCB二叉树的三叉链表表示:二叉树的三叉链表表示:链式存储链式存储三叉链表三叉链表 typedef struct TriTNode TElemType data;struct TriTNode *lchild,*rchild;struct TriTNode *parent;TriTNode,*TriTree;三叉链表的三叉链表的C C 语言类型描述如下语言类型描述如下:parent lchild data rchild结点结构结点结构:/结点结构结点结构/左右孩子指针左右孩子指针/双亲指针双亲指针链式存储链式存储三叉链表三叉链表链式存储链式存储双亲链表双亲链表结点结构结点结构:data p
8、arent LRTag数据域数据域双亲域,存储当双亲域,存储当前结点双亲结点前结点双亲结点的存储位置的存储位置左右孩子标志,左右孩子标志,如果是其双亲如果是其双亲的左孩子,则的左孩子,则填写填写“L”;如如果是右孩子,果是右孩子,则填写则填写“R”根根链式存储链式存储双亲链表双亲链表BDCEAF01234564401-13LRRRLABDCEF链式存储链式存储双亲链表双亲链表 typedef struct BPTNode /结点结构结点结构 TElemType data;int parent;/指向双亲的指针 char LRTag;/左、右孩子标志域 BPTNodetypedef struct
9、 BPTree/树结构树结构 BPTNode nodesMAX_TREE_SIZE;int num_node;/结点数目结点数目 int root;/根结点的位置根结点的位置 BPTree链式存储链式存储双亲链表双亲链表问题的提出问题的提出 在实际应用中,经常需要在二叉树中查找具有某些特征的结点,或者对树中的全部结点逐一进行某种处理,这就提出了二叉树的遍历的问题。问题的提出问题的提出 定义:定义:顺着某一条搜索路径巡访二叉树中的结点,使得每个结点均被访问一次,而且仅被访问一次。作用:作用:遍历的目的是线性化,使二叉树中的结点能够按照某种次序排列在一个线性队列上,便于处理。问题的提出问题的提出
10、线性结构的遍历:因为每个结点均只有一个后继,所以只有一条搜索路径。二叉树的遍历:二叉树是非线性结构,每个结点有两个后继,则存在如何遍历即按什么样的搜索路径进行遍历的问题。问题的提出问题的提出二叉树存在下述三条搜索路径:二叉树存在下述三条搜索路径:n1先上后下先上后下的按层次遍历;n2先左先左(子树)后右后右(子树)的遍历;nDLR,LDR,LRDn3先右先右(子树)后左后左(子树)的遍历。nDRL,RDL,RLD先序(根)遍历先序(根)遍历左子树右子树根根根根左左子树子树右右子树子树 若二叉树为空树,则空操作;若二叉树为空树,则空操作;否则,否则,(1 1)访问根结点)访问根结点(2 2)先序
11、遍历左子树)先序遍历左子树(3 3)先序遍历右子树)先序遍历右子树先序(根)遍历先序(根)遍历ABCDEFGHKABCDEFGHKA B C D E F G H K先序遍历先序遍历ABDCEFABCvoid Preorder(BiTree T,void(*visit)(TElemType&e)/先序遍历二叉树 1 if(!T)return;2 visit(T-data);/访问结点 3 Preorder(T-lchild,visit);/遍历左子树 4 Preorder(T-rchild,visit);/遍历右子树 先序遍历先序遍历中序(根)遍历中序(根)遍历左子树右子树根根根根左左子树子树右
12、右子树子树 若二叉树为空树,则空操作;否则,(1 1)中序遍历左子树;)中序遍历左子树;(2 2)访问根结点;)访问根结点;(3 3)中序遍历右子树)中序遍历右子树中序(根)遍历中序(根)遍历ABCDEFGHKABCDEFGHKAB D CE H G K F中序遍历中序遍历void Inorder(BiTree T,void(*visit)(TElemType&e)/中序遍历二叉树二叉树 1 if(!T)return;2 Inorder(T-lchild,visit);/遍历左子树3 visit(T-data);/访问结点4 Inorder(T-rchild,visit);/遍历右子树后序(根
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 12 二叉 存储 结构 遍历
限制150内