1、树的概念

 

一、课程目标

  1. 树的定义
  2. 树的存储

二、目标详解

1、树的定义

树是一种非线性的数据结构,是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上、叶朝下的。

父子关系:

  • 每个结点(node)有零个或多个子结点(child)
  • 每一个非根结点有且只有一个父结点(parent)
  • 没有父结点的结点称为根结点(root),有且仅有一个根结点

树与图:图是点和边的集合,树是点和父子关系(边)的集合。

树 <=> n个顶点、n-1条边的连通图。

  • 无环
  • 连通

子树:

  • 每个结点都可以看成一个树,非根结点的树,称为子树。
  • 子树互相独立

空树:空集合也是树,称为空树。

2、树的存储

树的核心应用就是遍历访问,出于父子关系的特点,必须要考虑两种访问场景:

  • 从父结点出发访问子结点
  • 从子结点出发访问父结点

因此为了支持这两种场景(甚至两者都有),就产生了三种基本的(邻接表)存储方式。

  • 双亲表示法:每个结点存储双亲的位置,可以快速访问到
  • 孩子表示法:每个结点存储它所有孩子的的位置(用链表或动态数组)
  • 双亲孩子表示法:每个结点即存储父亲位置,也存储所有孩子的位置

2.1 双亲表示法

每个结点除了自己的信息以外,还存储父亲的位置,方便能从下往上遍历。

方案:

  • 如果结点没有信息要存储,就可以用一个数组,下标为结点编号,值为父亲编号。
  • 如果结点有其它信息要存储,则可以用一个结构体来存储信息和父亲编号。

根结点没有父亲,因此其存储的父亲位置为空(0或-1)。

优缺点:

  • 结点能快速找到其父亲,复杂度为O(1)
  • 从结点往上找根结点也比较容易,复杂度为O(logn)
  • 从结点找孩子比较麻烦,要循环判定,复杂度为O(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值