树和二叉树

树结构比较适合描述具有层次关系的数据,如祖先—后代,上级—下级,整体—部分以及其他类似的关系。很多实际问题抽象的数据模型是树结构。
1.树
1.树的逻辑结构
树的定义
在树中通常将数据元素称为结点(node)
树是n个结点的有限集合。当n=0时,称为空树,任意一棵非空树满足以下条件:
(1)有且仅有一个特定的称为根的结点;
(2)当n>1时,除根结点之外的其余结点被分成m(m>0)个互不相交的有限集合T1,T2,…,Tm,其中每个集合又是一棵树,并称为这个根节点的子树。
2.树的基本术语
(1)结点的度,树的度
某结点所拥有的子树的个数称为该结点的度;树中各结点度的最大值称为该树的度。
(2)叶子结点,分支结点
度为0的结点称为叶子结点,度不为0的结点称为分支结点。
(3)孩子结点,双亲结点,兄弟结点
某结点的子树的根节点称为该结点的孩子结点,该结点称为其孩子结点的双亲结点;具有同一个双亲的孩子结点互称为兄弟结点。
2.二叉树

2.1二叉树的定义

二叉树是由n个节点构成的有限集合,n大于等于零,每个节点的最多有两个子树的有序树。

二叉树的特点如下:

a.二叉树是有序树,即使只有一个子树,也必须区分左、右子树。

b.二叉树的每个节点的度不能大于2,只能取0、1、2三者中的一个。

c.二叉树中所有节点的形态有5种,空节点、无左右子树的节点、只有左子树的节点、只有右子树的节点、同时具有左右子树的节点。

2.2二叉的性质
性质1 二叉树的第i层上最多有2i-1个节点。

性质2 深度为h的二叉树上最多有2h-1个节点

性质3 具有n个节点的二叉树的高度不小于Log2(n+1)的最大整数

性质4 在任意一棵二叉树中,如果叶子节点的个数为n1,度为2的节点个数为n2,则n1=n2+1.

性质5 具有n个节点的完全二叉树的高度为Log2(n+1)。

性质6 假定对一颗有n个节点的完全二叉树中的节点,按从上到下,从左到右的顺序,从1到n编号,设树中某一个节点的序号为i,i<=i<=n.同,则有如下关系:

①若i等于1,则该节点为二叉树的根。
②若i大于1,则该节点喘气双亲节点的序号为i/2.

③若2i<=n,则该节点的左孩子节点的序号为2i,否则该 节点无左孩子节点。

④若2i+1<=n,则该节点的右孩子节点的序号为2i+1,否则该节点无右孩子节点。

满二叉树:若深度为h的二叉树,恰好具有2h-1个节点则该树称为满二叉树。
完全二叉树:若一棵具有n个节点的二叉树的逻辑结构与满二叉树的前n个节点的逻辑结构完全相同,则称该二叉树为完全二叉树。
扩充二叉树:除叶子节点外,其余节点都必须有两个孩子的二叉树。
2.3二叉树的存储结构
二叉树的存储结构有顺序存储结构 、链式存储结构和仿真指针存储结构

a.顺序存储结构
顺序存储结构也就是采用一维数组存储的。根据二叉树的性质6可以计算出双亲节点、左右孩子节点的下标。因此满二叉树、完全二叉树的存储可采用一维数组存储。

注意:一般的二叉树不宜采用顺序存储,这是由于如果采用该方法存储,不能确定一棵普通二叉树的各种关系。如果需要采用顺序存储结构存储一棵普通二叉树,可为一棵普通的二叉树增添一些并不存在的节点使之变成完全二叉树的形态,然后再采用顺序存储结构存储。

b.链式存储结构
链式存储结构采用链表存储二叉树中的数据元素。

二叉树中最常见的链式存储结构是二叉链,每一个节点包含3个域,分别是数据元素或data,左孩子域lChild和右孩子域rChild
二叉树的二叉链存储结构是常用的存储结构,
优点:结构简单,可方便地构造任何二叉树,可实现二叉树的大多数操作。
缺点:难以查找当前节点的双亲节点。(可采用三叉链存储结构解决这个问题,就是在二叉存储结构上再增加一个双亲节点的链域parent)

c.仿真指针存储结构
二叉树的仿真指针存储结构使用数组存储二叉树中的节点。数组中的每个节点除数据域外,增加仿真指针域用于仿真常规指针构造二叉树中节点之间的逻辑关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值