树 Tree
定义
树是一种数据结构,它是由n(n≥0)个有限节点组成一个具有层次关系的集合。
把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
术语
- 节点(node):每一个元素称为一个节点。
- 根节点(root) :没有父节点的节点(从图像来看,就是往上没有任何节点了)。一棵树只能有一个根节点。
- 子节点:一个节点的下一级节点。如图,B、C是A的子节点。
- 父节点:一个节点的上一级节点。如图,B是D、E的父节点。
- 叶子节点:没有子节点的节点。如图,H、E、F、G是叶子节点。
- 节点的权:该节点存放的值。
- 路径:从root节点到该节点的路线,可能不唯一。
- 层:从根节点开始,根节点为第一层,根节点的子节点在第二层,以此类推。
- 高度/深度:一棵树的最大层数。
- 度:某节点拥有子节点的数量。叶子节点的度为0
- 子树:子节点及其子节点构成的树,一个节点也是树。如图DH是节点B的子树,E也是B的子树。
- 森林:由m(m>0)棵互不相交的树的集合称为森林;
二叉树 BiTree
定义
- 每个节点最多只能有2个节点的树称为二叉树。
- 二叉树的子节点分为左节点和右节点。
满二叉树
定义
一个二叉树,如果每一个层的节点数都达到最大值(也就是每个父节点都有2个子节点),则这个二叉树就是满二叉树。
性质
对于深度为
k
k
k的满二叉树,每层的节点数为
2
k
−
1
2^{k-1}
2k−1,满足首项为1、公比为2的等比数列。
由等比数列求和公式:
S
=
a
1
(
1
−
q
n
)
1
−
q
S=\frac{a_1(1-q^n)}{1-q}
S=1−qa1(1−qn)
可以推导出满二叉树的节点总数为
2
k
−
1
2^{k}-1
2k−1.
完全二叉树
定义
一个深度为 k k k的二叉树,如果其 k − 1 k-1 k−1层的节点是满的, k k k层节点是左连续的(也就是说,最后一层从左边第一个节点到最后一个节点都是连续的,比如把图中的 0005 0005 0005节点去掉,就不算连续了。),那么就将这种二叉树称为完全二叉树。
性质
- 满二叉树是完全二叉树的特殊情况;
- n个结点的完全二叉树的深度为: [ l o g 2 n ] + 1 [log_2n]+1 [log2n]+1([ ]表示向下取整)
BST 二叉搜索树
Binary Search Tree
- 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
- 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
- 它的左、右子树也分别为二叉排序树
AVL 平衡二叉树
平衡二叉搜索树:又被称为AVL(Adelson-Velsky and Landis)树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。