树
树的定义
树是一种一对多的数据结构。
树是含有n个结点的有限集。n=0时为空树
非空树中:
- 有切仅有一个特定的结点——根结点root。
- 当n>1时,其余节点可以分成m个互不相交的有限集T1,…Tm,每个集合本身又是一棵树。我们称为根的子树。
结点分类
度:结点有用的子树的个数称为该结点的度。
树的度是树内各结点的度的最大值。
- 根结点:度不为0
- 中间结点:度不为0
- 叶子结点: 度为0
结点间的相互关系
- 孩子结点:该结点的子树的根。(就是直接相连的向下的结点)
- 双亲结点:A是B的孩子结点,B就是A的双亲结点。
- 兄弟节点:有着同样双亲结点的各个结点。
- 祖先结点:从根到该结点所经分支上的所有结点。
- 子孙结点:以该结点为根的子树中的任意结点。
树的其他概念
结点的层次: 根为第一层,每向下有孩子就加一层。
树中结点的最大层次称为树的深度(高度)。
森林是m个**(m>=0)** 课互不相交的树的集合。
对比一下线性结构和树形结构:
树的抽象数据类型
树的存储结构
双亲表示法
树的结点的特性: 这个结点可能没有孩子结点,但是一定有双亲结点
一个结点有信息域和位置域,位置域用来表示双亲所在位置。
类似这样:
双亲孩子表示法
把所有结点放入一个二维数组当中,
孩子兄弟表示法
原理:任何一棵树中的结点中,该结点的第一个孩子存在,就是唯一的。它的右兄弟如果存在,也是唯一的。(有序树)
做法:设置2个指针,分别指向该结点的第一个孩子和该结点的右兄弟。(也可以设置多余的指针来解决访问双亲结点等一些问题)
这个表示法将一棵复杂的树变成了一颗二叉树。
二叉树
定义:由n个结点组成(n>=0). 如果n>0.那么这个二叉树一定是由一个根节点和两颗互不相交的二叉树组成(有递归的感觉)
二叉树的特点
- 每个结点最多两棵子树
- 左子树