一、二叉树
1、概念:
二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。
2、特殊二叉树:
满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树
完全二叉树:只有最下面的两层结点度能够小于2,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树,完全二叉树是效率很高的数据结构, 堆是一种完全二叉树或者近似完全二叉树,所以效率极高,像十分常用的 排序算法、 Dijkstra算法、 Prim算法等都要用堆才能优化,几乎每次都要考到的 二叉排序树的效率也要借助 平衡性来提高,而平衡性基于完全二叉树
二叉排序树(二叉查找树,Binary Sort Tree):
它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树;
平衡二叉树(AVL树):
它或者是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
红黑树(RB树):
性质1. 节点是红色或黑色。
性质2. 根是黑色。
性质3 每个叶节点是黑色的。
性质4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
性质5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
3、性质:
1、二叉树的第i层上至多有
个结点(i>=1)
2、深度为k的二叉树上至多包含
个结点(k>=1)
3、对任何一颗二叉树,若他含有N0个叶子,N2个度为2的结点,则必须存在关系:N0=N2+1
4、具有n个结点的完全二叉树的深度为[log2n]+1或[log2(n+1)]
5、n个结点的完全二叉树,按照顺序方式存储,对任意结点i,有如下关系:
