数据结构----------树(tree)

1. 树的定义

树状图是一种数据结构,由n个有限节点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一颗倒挂的树,根朝上,也朝下。

节点:上面的每个字母都表示一个节点。类似于java面向对象编程中,节点一般代表对象;边:连接节点的线,表示节点的关联关系,类似于java中的引用。

树通常具有以下特点:

  1. 每个节点(node)有零个或多个子节点
  2. 没有父节点的节点称为根节点(root)
  3. 每一个非根节点有且只有一个父节点
  4. 除了更节点外,每个子节点可以分为多个不想交的子树

2.树的核心术语

  • 节点的度:一个节点含有的子树的个数称为该节点的度
  • 树的度:一棵树中,最大的节点的度称为树的度
  • 叶节点或终端节点:度为0的节点称为叶节点
  • 非终端节点或分支节点:度不为0的节点
  • 双亲节点或者父节点:含有子节点的节点称为该子节点的父节点
  • 子节点:一个节点称为其父节点的子节点
  • 兄弟节点:具有相同父节点的节点称为兄弟节点
  • 堂兄弟节点:父节点在同一层的节点
  • 节点的层次:从根开始定义,根为第一层,依次类推
  • 树的高度或深度:树中节点的最大层次
  • 有序树:子树有序的树
  • 无序树:不考虑子树的顺序
  • 森林:由m>1棵互不相交的树的集合称为森林

 3.树的表示方法

由于实际中二叉树用得最多,而且多叉树可以转化成二叉树,因此主要讲二叉树的存储结构, 即如何表示二叉树结构,和创建实际的二叉树。这里有几种表示方法:

1、孩子兄弟表示法

每个节点设置两个指针,分别指向该节点的第一个孩子和此节点的兄弟。 结点结构:【data】【firstchild】【rightsib】 其中 data 为数据域,firstchild 为指针域,存储该节点的第一个孩子结点存储地址,rightsub 是指针域,存储该节点的右兄弟结点的存储地址。

 2、子节点表示法/孩子表示法

树中每个结点可能有多课子树,可以考虑用多重链表,即每个结点有多个指针域,其中每个 指针指向一棵子树的根节点,这种方法叫做多重链表表示法。

3、父节点表示法/双亲表示法

我们假设以一组连续空间存储树的结点,同时在每个结点中,附设一个指示器指示其双亲结 点在数组中的位置。 每个结点:【data】【parent】 其中 data:数据域,存储结点的数据信息。 parent:指针域,存储该结点的双亲在数组找那个的下标。

详细见:https://blog.csdn.net/douboomfly/article/details/70171410

 

猜你喜欢

转载自www.cnblogs.com/mayitoutou/p/9285790.html