6章讲义1.ppt
《6章讲义1.ppt》由会员分享,可在线阅读,更多相关《6章讲义1.ppt(80页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1/30/202316.1 树的定义与基本术语树的定义与基本术语一、树的概念和基本术语一、树的概念和基本术语1/30/20232DHIJPANLKM树是由树是由n n个结点构成的有限集。个结点构成的有限集。n=0n=0为空树为空树n0n0为非空树为非空树1/30/20233DHIJPANLKM非空树的特点:非空树的特点:有且仅有一个根结点;有且仅有一个根结点;若若n1n1,则其余结点可以分为,则其余结点可以分为m m个互不相交个互不相交的有限集的有限集T T1 1,T,T2 2,T,Tm m,其中,每一个集合本其中,每一个集合本身又是一棵身又是一棵子树子树。T1T2T31/30/20234DH
2、IJPANLKMT1T2T3有序树;无序树有序树;无序树第一个孩子;最后一个孩子第一个孩子;最后一个孩子1/30/20235结点结点:结点的度结点的度:树的度树的度:叶子结点(终端结点)叶子结点(终端结点):分支结点(非终端结点)分支结点(非终端结点):数据元素+若干指向子树的分支分支的个数树中所有结点的度的最大值度为零的结点度大于零的结点DHIJPNLKM内部结点:除根外的分支结点内部结点:除根外的分支结点1/30/20236孩子孩子结点结点双亲双亲结点结点兄弟兄弟结点结点堂堂兄弟兄弟祖先祖先结点结点子孙子孙结点结点结点的层次结点的层次:树的深度:树的深度:层次层次ABCDEFGHIJMKL
3、假设根结点的层次为假设根结点的层次为1,1,第第l 层的层的结点的子树根结点的层次为结点的子树根结点的层次为l+1树中叶子结点所在的最大层次树中叶子结点所在的最大层次1 12 23 34 41/30/20237任何一棵非空树是一个二元组 Tree=(root,F)其中:其中:root 被称为根结点,F 被称为子树森林森林:森林:是 m(m0)棵互不相交的树的集合ArootBEFKLCGDHIJMF1/30/20238对比对比树型结构树型结构和和线性结构线性结构的结构特点的结构特点1/30/20239线性结构线性结构树型结构树型结构第一个数据元素第一个数据元素 (无前驱无前驱)根结点根结点 (无
4、前驱无前驱)最后一个数据元素最后一个数据元素 (无后继无后继)多个叶子结点多个叶子结点 (无后继无后继)其它数据元素其它数据元素(一个前驱、一个前驱、一个后继一个后继)其它数据元素其它数据元素(一个前驱、一个前驱、一个或多个后继一个或多个后继)1/30/202310二、二、树的类型定义树的类型定义1/30/202311数据对象数据对象 D:D是具有相同特性的数据元素的集合。是具有相同特性的数据元素的集合。若若D为空集,则称为空树;为空集,则称为空树;否则否则:(1)在在D中存在唯一的称为根的数据元素中存在唯一的称为根的数据元素root,(2)当当n1时,其余结点可分为时,其余结点可分为m(m0
5、)个互个互 不相交的有限集不相交的有限集T1,T2,Tm,其中每一其中每一 个子集本身又是一棵符合本定义的树,个子集本身又是一棵符合本定义的树,称为根称为根root的子树。的子树。数据关系数据关系 R:1/30/202312 基本操作:基本操作:查查 找找 类类 插插 入入 类类删删 除除 类类1/30/202313 Root(T)/求树的根结点求树的根结点 查找类:查找类:Value(T,cur_e)/求当前结点的元素值求当前结点的元素值 Parent(T,cur_e)/求当前结点的双亲结点求当前结点的双亲结点LeftChild(T,cur_e)/求当前结点的最左孩子求当前结点的最左孩子 R
6、ightSibling(T,cur_e)/求当前结点的右兄弟求当前结点的右兄弟TreeEmpty(T)/判定树是否为空树判定树是否为空树 TreeDepth(T)/求树的深度求树的深度TraverseTree(T,Visit()/遍历遍历1/30/202314InitTree(&T)/初始化,构造空树初始化,构造空树 插入类:插入类:CreateTree(&T,definition)/按定义构造树按定义构造树Assign(T,&cur_e,value)/给当前结点赋值给当前结点赋值InsertChild(&T,&p,i,c)/将将以以c为根的树为根的树插入为插入为T中结点中结点p的的第第i棵子
7、树棵子树1/30/202315 ClearTree(&T)/将树清空将树清空 删除类:删除类:DestroyTree(&T)/销毁树的结构销毁树的结构DeleteChild(&T,&p,i)/删除结点删除结点p的第的第i棵子树棵子树1/30/202316ABCDEFGHIJMKLA()T1T3T2树根例如例如:B(E,F(K,L),C(G),D(H,I,J(M)1/30/2023176.2 二叉树二叉树1/30/2023186.2.1 二叉树的类型定义二叉树的类型定义1/30/202319 二叉树为有序树,其上的每个结点至多只有两棵子树,分别称为左子树和右子树。ABCDEFGHK根结点左子树右
8、子树EF1/30/202320二叉树的五种基本形态:二叉树的五种基本形态:N空树空树只含根结点只含根结点NNNLRR右子树为空树右子树为空树L左子树为空树左子树为空树左右子左右子树均不树均不为空树为空树1/30/202321 二叉树的主要基本操作二叉树的主要基本操作:查查 找找 类类插插 入入 类类删删 除除 类类1/30/202322 Root(T);Value(T,e);Parent(T,e);LeftChild(T,e);RightChild(T,e);LeftSibling(T,e);RightSibling(T,e);BiTreeEmpty(T);BiTreeDepth(T);Pre
9、OrderTraverse(T,Visit();InOrderTraverse(T,Visit();PostOrderTraverse(T,Visit();LevelOrderTraverse(T,Visit();查查 找找 类类1/30/202323 InitBiTree(&T);Assign(T,&e,value);CreateBiTree(&T,definition);InsertChild(&T,&p,LR,c);插插 入入 类类初始条件:初始条件:P指向二指向二叉树中某个结点,叉树中某个结点,LR为为0或或1,非空二叉树,非空二叉树c右子树为空,且不与右子树为空,且不与T相交。相交。
10、操作结果:操作结果:将树将树c插入为插入为T中中p结点的左子树或右子树,结点的左子树或右子树,而以而以p结点为根的原左或右子树则成为结点为根的原左或右子树则成为c的右的右子树。子树。1/30/202324ClearBiTree(&T);DestroyBiTree(&T);DeleteChild(&T,&p,LR);删删 除除 类类初始条件:初始条件:P指向指向T中某个结点,中某个结点,LR为为0或或1操作结果:操作结果:根据根据LR为为0或或1,删除,删除P所指结所指结点的左子树或右子树。点的左子树或右子树。1/30/2023256.2.2二叉树的性质二叉树的性质1/30/202326 性质性
11、质 1:在二叉树的第 i 层上至多有2i-1 个结点。(i1)性质性质 2:深度为 k 的二叉树上至多含 2k-1 个结点(k1)1/30/202327 性质性质 3:对任何一棵二叉树,若它含有n0 个叶子结点、n2 个度为 2 的结点,则必存在关系式:n0=n2+11/30/202328两类两类特殊特殊的二叉树:的二叉树:满二叉树满二叉树:指的是深度为k且含有2k-1个结点的二叉树。完全二叉树完全二叉树:树中所含的 n 个结点和满二叉树中编号编号为为 1 至至 n 的结点的结点一一对应。123456789 10 11 12 13 14 15abcdefghij1/30/202329对于一棵完
12、全对于一棵完全二叉树,其叶二叉树,其叶子结点只可能子结点只可能出现在层次最出现在层次最大的两层上;大的两层上;abcdefghij对于任一个结点,若其右分支下子孙的最对于任一个结点,若其右分支下子孙的最大层次为大层次为l,则其左分支下子孙的最大层次,则其左分支下子孙的最大层次必定为必定为l或或l+1。即对于任何一个结点,如。即对于任何一个结点,如果不是叶子结点,则必定存在左子树。果不是叶子结点,则必定存在左子树。1/30/202330 性质性质 4:具有 n 个结点的完全二叉树的深度深度为 log2n +1证明:证明:设设 完全二叉树的深度为 k 则根据第二条性质得 2k-1 n 2k 即 k
13、-1 log2 n k 因为因为 k 只能是整数,因此,只能是整数,因此,k=log2n +1log2 n 1,则编号为 i/2 的结点为其双亲双亲结点;(2)若 2in,则该结点无左孩子,该结点为叶子。否则,编号为 2i 的结点为其左孩子左孩子结点;(3)若 2i+1n,则该结点无右孩子结点,否则,编号为2i+1 的结点为其右孩子右孩子结点。1/30/2023326.2.3 二叉树的存储结构二叉树的存储结构二、二叉树的链式二、二叉树的链式 存储表示存储表示一、一、二叉树的顺序二叉树的顺序 存储表示存储表示1/30/202333#define MAX_TREE_SIZE 100 /二叉树的最大
14、结点数typedef TElemType SqBiTreeMAX_TREE_SIZE;/0号单元存储根结点SqBiTree bt;一、一、二叉树的顺序存储表示二叉树的顺序存储表示1/30/202334二叉树的顺序存储表示方式二叉树的顺序存储表示方式存放元素的规则:存放元素的规则:从上到下、从左到右的顺序,依从上到下、从左到右的顺序,依次存放完全二叉树中的各个结点次存放完全二叉树中的各个结点对应的数据元素。对应的数据元素。1/30/202335例如例如:ABECGNDFHJLIKM014132635791181012 A B C D E F G H I J K L M 0 1 2 3 4 5 6
15、 7 8 9 10 11 12 13N1/30/202336例如例如:A B C D E F 0 1 2 3 4 5 6 7 8 9 10 11 12 13ABDCEF1401326下标为下标为i的结点的左右孩子结的结点的左右孩子结点下标为:点下标为:2i+1和和2i+21/30/202337二、二叉树的链式存储表示二、二叉树的链式存储表示1.1.二叉链表二叉链表2三叉链表三叉链表3线索链表线索链表1/30/202338lchild data rchild结点结构结点结构:1.1.二叉链表二叉链表ABDCEF1/30/202339ACEBDF rootlchild data rchild结点结
16、构结点结构:1.1.二叉链表二叉链表未占用指针的个数未占用指针的个数:n+11/30/202340typedef struct BiTNode /结点结构结点结构 TElemType data;struct BiTNode *lchild,*rchild;/左右孩子指针左右孩子指针 BiTNode,*BiTree;lchild data rchild结点结构结点结构:二叉链表的二叉链表的C 语言类型描述语言类型描述1/30/202341基本操作的函数原型说明基本操作的函数原型说明Status CreateBiTree(BiTree&T);/按先序秩序输入二叉树中结点的值,构造按先序秩序输入二叉
17、树中结点的值,构造/二叉链表表示的二叉树二叉链表表示的二叉树Status PreOrderTraverse(BiTree T,Status(*Visit)(TElemType e);/先序遍历二叉树先序遍历二叉树TStatus InOrderTraverse(BiTree T,Status(*Visit)(TElemType e);/中序遍历二叉树中序遍历二叉树T1/30/202342基本操作的函数原型说明基本操作的函数原型说明Status PostOrderTraverse(BiTree T,Status(*Visit)(TElemType e);/后序遍历二叉树后序遍历二叉树TStatus
18、 LevelOrderTraverse(BiTree T,Status(*Visit)(TElemType e);/层序遍历二叉树层序遍历二叉树T1/30/202343visit是一个函数,可以是对结点的插入、删除是一个函数,可以是对结点的插入、删除和修改,可以是其他的操作,例如,最简单的和修改,可以是其他的操作,例如,最简单的Visit函数:输出结点数据的值。函数:输出结点数据的值。Status PrintElement(TElemType e)/输出元素输出元素e的值的值 printf(e);/return OK;1/30/2023442三叉链表三叉链表lchild data parent
19、 rchild 结点结构结点结构:abcd a b c d 1/30/202345 typedef struct TriTNode /结点结构结点结构 TElemType data;struct TriTNode *lchild,*rchild;/左右孩子指针 struct TriTNode *parent;/双亲指针 TriTNode,*TriTree;lchild data parent rchild结点结构结点结构:三叉链表的三叉链表的C 语言类型描述语言类型描述1/30/202346树的存储结构的选择依据:树的存储结构的选择依据:树的形态;树的形态;对树进行对树进行的基本操作。的基本操
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 讲义
限制150内