数据结构之树与二叉树(理论篇)

一、树

树的定义:树是n(n>=0)个结点的有限集。

对于任意一棵非空树:(1)有且仅有一个特定的结点称为根结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,T3···,Tm,其中每一个集合本身又是一棵树,并且称为根的子树。

结点:树的结点包含一个数据元素及若干指向其子树的分支。

度(degree):结点拥有的子树数称为结点的度。

叶子(leaf):度为0的结点称为叶子或终端结点;度不为0的结点称为非终端结点或分支结点,除根结点外,分支结点也称为内部节点。

树的度:树内各结点的度的最大值。

孩子(child):结点的子树的根称为该结点的孩子

双亲(parent):该结点称为孩子的双亲。

兄弟(sibling):同一个双亲的孩子之间互称兄弟。

祖先:结点的祖先是从根到该结点所经分支上的所有结点。

子孙:反之,以某结点为根的子树中的任一结点都称为该结点的子孙。

层次(level):从根开始定义起:根为第一层,根的孩子为第二层。双亲在同一层的结点互为堂兄弟。

树的深度或高度(depth):树中结点的最大层次称为树的深度或高度。

有序树:如果树中结点的各个子树看成是从左至右是有序的(即不能互换),则称该树为有序树,否则为无序树。

森林(forest):森林是m(m>=0)棵互不相交的树的集合。对树中每个结点而言,其子树的集合即为森林。

二、二叉树

二叉树的定义:二叉树是另一种树型结构,它的特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。

二叉树的5种形态:由递归定义,二叉树或为空,或是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。由于这两棵子树也是二叉树,则它们也可以是空树。

二叉树的性质

性质1:在二叉树的第i层上至多有2^(i-1)个结点(i>=1)

性质2:深度为k的二叉树至多有2^k-1个结点

证明: 2^0+2^1+···+2^(k-1)=2^k-1

性质3:对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1。

证明: 结点总数 :n=n0+n1+n2 (a)

设B为分支总数,因为除了根结点外,每一个结点都有一个分支进入,则:n=B+1(1),又由于这些分支由度为1和度为2的结点射出的,则:B=n1+2n2 (2),由(1)(2)得,n=n1+2n2+1 (b)

由(a)(b)得,n0=n2+1

满二叉树:一棵深度为k且有2^k-1个结点的二叉树称为满二叉树。

完全二叉树:深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应时,称之为完全二叉树。

完全二叉树的特点:(1)叶子结点只可能在层次最大的两层上出现;(2)对任一结点,若其右分支下的子孙的最大层次为l,则其左分支下的子孙的最大层次必为l或l+1。

二叉树的存储结构:

(1)顺序存储结构:用一组地址连续的存储单元依次自上而下、自左至右存储完全二叉树上的节点元素,即将完全二叉树上编号为 i 的结点元素存储在一维数组中下标为 i-1 的分量中。以“0”表示不存在此结点。由此可见,这种顺序存储仅适用于完全二叉树。

(2)链式存储结构:表示二叉树的链表中的结点至少包含3个域:数据域和左、右指针域。有时,为了便于找到结点的双亲,则还可以在结点结构中增加一个指向其双亲结点的指针域。利用这两种结点结构的二叉树存储结构分别称之为二叉链表和三叉链表。链表的头指针指向二叉树的根结点。

含有n个结点的二叉链表中有n+1个空链域。

证明:      度为2和度为1的结点公有2n2+n1个指针域,n个结点工2n个指针域,又n0=n2+1(1),n=n0+n1+n2(2)

由(1)(2)得n=2n2+n1+1,所以空链域=2n-(2n2+1)=2n-(n-1)=n+1

三、二叉树的遍历

定义:二叉树在应用中,常常要求对树中全部结点逐一进行某种操作,这就提出了遍历二叉树问题,即如何按照某条搜索路径巡访树中的每个结点,使得每个结点均被访问一次,而且仅被访问一次。

(1)先序遍历:若二叉树为空,则空操作;否则

访问根结点-->先序遍历左子树-->先序遍历右子树

(2)中序遍历:若二叉树为空,则空操作;否则

先序遍历左子树-->访问根结点-->先序遍历右子树

(3)后序遍历:若二叉树为空,则空操作;否则

先序遍历左子树-->先序遍历右子树-->访问根结点

先序遍历得到前缀表示(波兰式),中序得到中缀表示,后序得到后缀表示(逆波兰式)

参考:严蔚敏《数据结构》(c语言版)

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 07:56:55

数据结构之树与二叉树(理论篇)的相关文章

javascript实现数据结构: 树和二叉树,二叉树的遍历和基本操作

树型结构是一类非常重要的非线性结构.直观地,树型结构是以分支关系定义的层次结构. 树在计算机领域中也有着广泛的应用,例如在编译程序中,用树来表示源程序的语法结构:在数据库系统中,可用树来组织信息:在分析算法的行为时,可用树来描述其执行过程等等. 下面讲解的内容完整代码在这:https://github.com/LukeLin/data-structure-with-js/blob/master/Binary%20tree/BinaryTree.js 首先看看树的一些概念: 1.树(Tree)是n

javascript实现数据结构: 树和二叉树的应用--最优二叉树(赫夫曼树),回溯法与树的遍历--求集合幂集及八皇后问题

赫夫曼树及其应用 赫夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,有着广泛的应用. 最优二叉树(Huffman树) 1 基本概念 ① 结点路径:从树中一个结点到另一个结点的之间的分支构成这两个结点之间的路径. ② 路径长度:结点路径上的分支数目称为路径长度. ③ 树的路径长度:从树根到每一个结点的路径长度之和. 以下图为例: A到F :结点路径 AEF : 路径长度(即边的数目) 2 : 树的路径长度:3*1+5*2+2*3=19: ④ 结点的带权路径长度:从该结点的到树的根结

数据结构之——树与二叉树

树的基本概念: 树的概念是学习树的关键所在,掌握了树的基本概念,学会树与二叉树,so easy.我通过一棵树来了解树的基本概念,如下图 1.结点的度 结点的度是子结点的个数.例如:结点1有三个字结点2,3,4,所以结点1的度为3. 2.树的度 树的度等于所有结点度中度最高的值.例如:上图中结点度最高为3,所以树的度为3. 3.叶子结点 叶子结点是度为0的结点即没有子结点的结点.例如:上图中3,5,6,7,9,10. 4.分支结点 分支结点是除了叶子结点,树中的其他所有结点.例如:上面树的分支结点

数据结构:树与二叉树

大部分笔记摘自<大话数据结构>与<数据结构> 一:相关定义 1.树是n个结点的有限集,n=0时称为空树.在任意一颗非空树中:(1)有且仅有一个特定的称为根的结点:(2)当n>1时,其余结点可分为m个互不相交的有限集,T1.T2.--.Tm,其中每一个集合本身又是一颗树,并且称为根的子树. 2.结点拥有的子树数称为结点的度,而树的度为结点的度的最大值.度为0的结点称为叶结点或终端结点,度不为0的结点称为分支结点.内部结点或非中断结点. 3.结点的子树的根称为结点的孩子,该结点称

数据结构2 树与二叉树

1.树结构是一种非常重要的非线性结构,该结构中的一个数据元素可以有两个或两个以上的直接后继元素,树可以用来描述客观世界中广泛存在的层次结构关系. 2. 树本身是递归的,即一棵树由若干颗子树构成,而子树又由更小的子树构成. 3. 二叉树的遍历过程实质上是按一定规则将之线性化的过程.按照先遍历左子树后遍历右子树的约定,根据访问根结点位置的不同,可得到二叉树的先序.中序.后序的遍历方法. 对于上面的二叉树,若采用先序遍历法,则按照根结点-左子树-右子树的顺序迭代遍历,先输出1,然后遍历其左子树,输出左

【数据结构】树与二叉树

树是一类重要的非线性数据结构,是以分支关系定义的层次结构 定义: 树(tree)是n(n>0)个结点的有限集T,其中: 有且仅有一个特定的结点,称为树的根(root) 当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,--Tm,其中每一个集合本身又是一棵树,称为根的子树(subtree) 特点: 树中至少有一个结点--根 树中各子树是互不相交的集合 基本术语 结点(node)--表示树中的元素,包括数据项及若干指向其子树的分支 结点的度(degree)--结点拥有的子树

(转)数据结构:树、二叉树、最优二叉树

来源:http://www.cnblogs.com/coder2012/archive/2013/06/05/3102868.html 树 树形结构是一类非常重要的非线性结构,它可以很好地描述客观世界中广泛存在的具有分支关系或层次特性的对象,因此在计算机领域里有着广泛应用,如操作系统中的文件管理.编译程序中的语法结构和数据库系统信息组织形式等. 树的相关定义 节点的度:一个节点含有的子树的个数称为该节点的度: 树的度:一棵树中,最大的节点的度称为树的度: 叶节点或终端节点:度为零的节点: 非终端

【数据结构】树与二叉树的基本概念

1. 树的定义与抽象数据类型 (1) 树的定义 树(Tree)是n(n>=0)个结点的有限集.n=0时称为空树.在任意一棵非空树中: 有且仅有一个特定的称为根(root)的结点: 当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1.T2.…….Tm,其中每一个集合本身又是一棵树,并且称为根的子树(subTree). 需要注意的是: n>0时根结点是唯一的,不可能存在多个根结点,别和现实中的大树混为一起,现实中的树有很多根须,那是真实的树,数据结构中的树是只能有一个根结点:

数据结构之树和二叉树实现

二叉树 二叉树的抽象数据类型的接口定义 public interface BinaryTree { final String []mode={"preOrder","inOrder","postOrder","levelOrder"}; boolean createBTree(String gt); boolean isEmpty(); void traverseBTree(String s); Object findBTre