树是什么
计算机中的树是一种数据结构,它是由n个有限节点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根在上而叶子在下。
树的特点
- 每个节点有零个或多个子节点
- 没有父节点的节点称为根结点
- 每一个非根节点有且只有一个父节点
- 除了根结点外,每个子节点可以分为多个不相交的子树
树的术语
- 节点:树中的每一个元素
- 父节点:生出该节点的节点,每一个节点只能有一个父节点
- 子节点:该节点生出的节点,一个节点没有或者有多个子节点
- 根节点:没有父节点的节点
- 叶子节点:没有子节点的节点
- 兄弟节点:同一个父节点的节点
- 节点高度:节点到叶子节点的最长路径
- 节点深度:节点到根节点的路径
- 节点层:节点深度+1
- 树的高度:根节点的高度
二叉树
- 二叉树:顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子节点和右子节点。
- 满二叉树:叶子节点全部在最底层,除了叶子结点外,每个节点都有左右两个子节点。满二叉树是完全二叉树的一种特殊情况。如图中2。
- 完全二叉树:叶子节点都在最底下两层,最后一层的叶子节点都靠左排列,并且除了最后一层,其他层的节点个数都要达到最大。如图中3。
(图来自王争《数据结构与算法之美》专栏)
二叉树的存储
- 链式存储:每个节点有三个字段,其中一个存储数据,另外两个分别指向左右子节点。
- 顺序存储:基于数组存储。适合于完全二叉树。可以将根节点存储于 i = 1 i=1 i