1、树
概念:树(Tree)是n(n≧0)个结点的有限集;n=0时称为空树;在任意一颗非空树中:有且仅有一个特定的称为根的结点。当n>1时,其余结点可分为m(m>0)个互不相交的有限集,其中每个集合本身又是一棵树,并且称为根的子树。
常用术语:
- 节点:树中的一个连接点
- 父节点:若一个节点含有子节点,则这个节点成为其子节点的父节点
- 子节点:一个节点含有的子树的根结点为改节点的子节点
- 叶子结点:没有子节点的节点
- 节点的权:节点的具体指
- 节点的度:此节点拥有的子节点个数
- 路径:从根节点到某个节点所走的路
- 层:根结点是一层,其它节点的层依次加一
- 子树:只要包含了一个结点,就得包含这个结点下的所有节点
- 树的高度(深度):树的节点最大层数就是树的高度
- 森林:多棵互不相交的树的集合称为森林
2、二叉树
特点:每个节点最多只能有两个子节点的形式的树为二叉树;子节点分为左节点和右节点
3、满二叉树
特点:所有非叶子结点都有左子树和右子树,且所有叶子结点都在最后一层的二叉树为满二叉树;非叶子结点的度一定是二;同样深度的二叉树中,满二叉树的节点个数最多,叶子数最多
4、完全二叉树
特点:如果该二叉树的所有叶子节点都在最后一层或倒数第二层,且最后一层的叶子结点在左边连续(从左往右没有空),倒数第二层的叶子结点在右边连续(从右往左没有空),为完全二叉树
层数为N的完全二叉树,节点总数=2的(N-1)次方
如果节点的度为1,则该节点只有左子树
同样节点数目的二叉树,完全二叉树深度最小
满二叉树一定是完全二叉树,反之则不一定
5、二叉搜索树 BST(Binary Search Tree)
特点:二叉搜索树也叫二叉排序树,任何一个非叶子结点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大,有相同的值,左右都可
二叉树的深度遍历分为:前序遍历、中序遍历、后序遍历
前序遍历:先输出父节点,再遍历左子树和右子树;上图结果为(7,3,1,5,10,9,12)
中序遍历:先遍历左子树,再输出父节点,再遍历右子树,中序遍历的结果有序;上图结果为(1,3,5,7,9,10,12)
后序遍历:先遍历左子树,再遍历右子树,最后输出父节点;上图结果为(1,5,3,9,12,10,7)
存在的问题:
根据数据(1,2,3,4,5,6)创建一颗BST为:
左子树全部为空,从形式上看,更像一个单链表,插入速度没有影响,查询速度明显降低,解决方案为平衡二叉树
6、平衡二叉搜索树(AVL)
特点:需满足BST的特征;任意一个节点,平衡因子的绝对值不超过1
某节点的高度值=max(左子树高度,右子树高度)+1
每个节点的左子树和右子树的高度差是平衡因子
高度和节点数的关系时0(log n)
7、2-3树
特点:每个节点都可存放一个元素或者两个元素,存放一个元素的节点称为二节点,存放两个元素的节点称为三节点,每个节点有2个或3个子节点,满足二叉搜索树的基本性质,且是一个绝对平衡的树
2-3树添加节点遵循三个大的前提:
满足二叉搜索树的特征
维持绝对平衡
不能往null节点插入数据
8、红黑树
- 红黑树的叶子结点指的是最后的空节点(原来理解的叶子结点的孩子节点)
- 每个节点都是有颜色的,或是红色或是黑色
- 根结点是黑色的
- 每个叶子结点都是黑色的(红色节点向左倾斜叫做左倾红黑树)
- 如果一个节点是红色的,那么它的孩子节点都是黑色的
- 从任何一个节点到叶子节点,经过的黑色节点是一样的