数据结构与算法系列-树-数的基本概念

树的定义

树形结构是一类重要的非线性结构,树是以分支关系定义的层次结构。

它是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:
每个结点有零个或多个子结点;
没有前驱的结点称为根结点;
每一个非根结点有且只有一个父结点;
除了根结点外,每个子结点可以分为m个不相交的子树;(来自维基百科) 


树的基本术语 来自维基百科

  1. 节点的度:一个节点含有的子树的个数称为该节点的度;
  2. 树的度:一棵树中,最大的节点的度称为树的度;
  3. 叶节点终端节点:度为零的节点;
  4. 非终端节点分支节点:度不为零的节点;
  5. 双亲节点父节点:若一个结点含有子节点,则这个节点称为其子节点的父节点;
  6. 孩子节点子节点:一个节点含有的子树的根节点称为该节点的子节点;
  7. 兄弟节点:具有相同父节点的节点互称为兄弟节点;
  8. 节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
  9. 树的高度深度:树中节点的最大层次;
  10. 堂兄弟节点:双亲在同一层的节点互为堂兄弟;
  11. 节点的祖先:从根到该节点所经分支上的所有节点;
  12. 子孙:以某节点为根的子树中任一节点都称为该节点的子孙。
  13. 森林:由m(m>=0)棵互不相交的树的集合称为森林;

树的存储结构

双亲表示法

这种方法一用一组连续的存储空间来存储树的结点。每个结点包括数据元素的值本身和指向结点双亲位置的指针两个成员。这种存储结构利用了每个结点(除根以外)只有唯一的双亲的性质,很容易由孩子找到双亲,但无法从双亲找到孩子。


多重链表表示方法

每个结点可能含有M个孩子,即每个结点发出M个链,分别指向它的一个孩子。由于树中各结点的度树不同,所需的指针域个数也不同,因此结点一般有两种表现形式:定长结点和不定长结点。

定长结点型即每个结点的指针域个数均为树的度数。但由于树中很多结点的度数都小于树的度数,使链表中有很多空的指针域 造成空间浪费。

不定长结点的指针域个数为该结点的度数。由于各结点的度数不同,则各结点的长度不同,为处理方便,结点中除数据域和指针域外一般还增加一个称为度的域,用于存储该结点的度。 有利用节省空间 但运算不便。

用不定长结点的多重链表来表示树时,每个结点的指针域等于该结点的孩子个数。



孩子-兄弟链表表示方法

每个结点包括三部分内容:结点值 指向该结点第一个孩子结点的指针和指向该结点下一个兄弟的指针。


维基百科关于树的介绍 http://zh.wikipedia.org/wiki/%E6%A0%91_(%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84)


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值