树型结构不同与线性表、栈、队列、串和广义树型结构不同与线性表、栈、队列、串和广义表结构,是一类重要的非线性数据结构,其中以树和二表结构,是一类重要的非线性数据结构,其中以树和二叉树最为常用。树形结构反映了元素之间的层次关系和叉树最为常用。树形结构反映了元素之间的层次关系和分支关系,它非常类似于自然界中的树。分支关系,它非常类似于自然界中的树。1第第第第6666章章章章树树树树和和和和二二二二叉叉叉叉树树树树树型结构在现实世界中广泛存在,例如人类树型结构在现实世界中广泛存在,例如人类社会的族谱和各种社会组织机构都可用树来表示。在社会的族谱和各种社会组织机构都可用树来表示。在计算机领域中,计算机领域中,DOSDOS和和WindowsWindows操作系统中对磁操作系统中对磁盘文件的管理就采用树型目录结构;在编译程序中,盘文件的管理就采用树型目录结构;在编译程序中,使用树来表示源程序的语法结构;在数据库系统中,使用树来表示源程序的语法结构;在数据库系统中,树型结构也是信息的重要组织形式之一。树型结构也是信息的重要组织形式之一。6.16.1树树6.26.2二叉树二叉树6.36.3遍历二叉树遍历二叉树6.46.4二叉线索树二叉线索树6.56.5树和森林与二叉树的转换树和森林与二叉树的转换6.66.6赫夫曼树及其应用赫夫曼树及其应用6.1树6.2二叉树6.3遍历二叉树6.4二叉线索树6.5树和森林与二叉树的转换6.6赫夫曼树及其应用树树(tree)(tree)结构是一种多分支多层次的数据结结构是一种多分支多层次的数据结构,由一组结点组成。由于它呈现与自然界树类似的结构,由一组结点组成。由于它呈现与自然界树类似的结构形式,所以称之为树。在许多算法中,常用树型结构构形式,所以称之为树。在许多算法中,常用树型结构描述问题的求解过程或表示求解的对策等。描述问题的求解过程或表示求解的对策等。树的逻辑结构树的逻辑结构6.16.1树树2树的存储结构树的存储结构树是由树是由nn((nn≥0)≥0)个结点组成的有限集。在任意个结点组成的有限集。在任意一棵非空树一棵非空树TT中:中:①①有且仅有一个特定的称为根有且仅有一个特定的称为根(root)(root)结点;结点;②②当当nn>1>1时,其余时,其余n-1n-1个结点分成个结点分成mm((mm>0)>0)个互不相交的有限集个互不相交的有限集TT11,,TT22,…,,…,TTmm,其中每一个集,其中每一个集合合TTii本身又都是一棵树,并且称为根的子树。本身又都是一棵树,并且称为根的子树。36.1.16.1.1树的逻辑结构树的逻辑结构1.1.树的定义树的定义AAAABBCCAABBCCAABBDDCCEEGGFFHHIIJJKK(a(a))(b(b))(c)(c)(d(d))452.2.树的基本操作树的基本操作InitTree(tree);InitTree(tree);操作结果:构造空树操作结果:构造空树TreeTree。。InsertChild(Tree,p,child);InsertChild(Tree,p,child);初始条件:树初始条件:树TreeTree存在,存在,pp指向指向TreeTree中某中某个结点,个结点,1≤1≤ii≤≤pp所指结点的度所指结点的度+1+1,非空树,非空树childchild与与TreeTree不相交。不相交。操作结果:插入操作结果:插入childchild为为TreeTree中中pp所指结点的子所指结点的子树。树。树结构中经常会用到一些基本术语。例如:树结构中经常会用到一些基本术语。例如:结点结点结点的度结点的度叶结点叶结点分支结点分支结点树的度树的度双亲及孩子双亲及孩子兄弟兄弟堂兄弟堂兄弟祖先祖先子孙子孙层次层次树的深度树的深度有序树有序树无序树无序树森林森林63.3.树的基本概念树的基本概念7AABBDDCCEEFFKKLLGGHHIIJJMM结点:树结点包含一个数据结点:树结点包含一个数据元素及若干指向其子树的分支元素及若干指向其子树的分支AA结点的度:结点所拥有的子树的数目结点的度:结点所拥有的子树的数目叶子结点:度为叶子结点:度为00的结点,也称终端结点的结点,也称终端结点FFKKLLGGIIJJMM分支结点:度不为分支结点:度不为00的结点,也称非终端结点的结点,也称非终端结点AABBDDCCEEHH树的度:树内各结点的度的最大值树的度:树内各结点的度的最大值双亲及孩子:一个结点的子树的根称为双亲及孩子:一个结点的子树的根称为该结点的孩子...