数据结构之树基本常识


树之初识

一、认识树

1、定义:树是有且仅有一个根节点,由若干个子树组成的有限集合。
2、特点:每个树只有一个根节点,除根节点外,每个结点的双亲也只有一个。兄弟结点并不相关。单个结点是一棵树,树根就是该结点本身。空树中没有结点。

二、树的存储结构

(1)双亲表示法
我们以一组连续的空间存储树,在每个结点中既有存储数据data的数据域,还有存储双亲下标索引的指针域。
根节点没有双亲,暂且设为-1。这样我们就可以很容易的找到根节点,只要双亲下标为-1就是根节点。如果
要找到结点的孩子就需要遍历整个结构,有点麻烦。可以加一个最左边的子结点下标,那么就可以方便找到
结点的孩子了。



下标数据双亲下标
0A-1
1B0
2C0
3D1
4E2
5F2
6G3
...............

(2)孩子表示法
换一种考虑方法,每个节点可能有多个子树,可以使用多重链表。每个结点有多个指针域,其中每个指针指向一颗子树的根结点。 不过每个结点的度大小可能不同,所以可以再增加一个指针域,存放该结点的度,规定指针域的个数等于加1,这样就可以避免
空间的浪费。下面先来说下多重链表表示法,其中我们格外增加指针域,存放结点的度。其结构如下:
datadegreechildindex 1 childindex 2 childindex 3 childindex 4 ...... childindex N



这种方法解决了空间浪费的缺点,提高了空间利用率,但链表结构的不同带来运算时间的损耗。那么有什么办法既可以减少空间的浪费还能保证结点结构相同。下面就来说说孩子表示法。具体思路是:把每个结点的孩子结点排列起来,以单链表存储,叶子结点单链表为空则N个结点有N个单链表。然后N个头指针又组成线性表,采用顺序存储结构,存放在一个一维数组中。如下图:


(3) 孩子兄弟表示法
任意一颗树,它的结点的第一个孩子如果存在就是的,它的右兄弟如果存在也是唯一的。因此,我们设置两个指针,分别指向该结点的第一个孩子和此结点的右兄弟。其结点结构如图所示:


这种表示法,给查找某个结点的某个孩子带来了方便,只需要通过firstchild找到此结点的长子,然后再通过长子结点的rightsib找到它的二弟,接着一直下去,直到找到具体的孩子。当然,如果想找某个结点的双亲,完全可以再增加一个parent指针域来解决快速查找双亲的问题。

三、常用术语

(1)结点的度:子树的个数成为度。
(2)度为0的为叶子结点。度不为0的是分支结点,除跟结点外,分支结点也称为内部结点。
(2)树的度:树中结点度数最大值。
(3)深度:树中层次最大的。
(5)兄弟结点:同一双亲的结点互称兄弟结点。
(6)森林:是m(m>=0)棵互不相交的树的集合。




























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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值