树形结构的基本概念
- 节点(node): 树上的每一个元素都是节点
- 根节点: 一棵树最顶端的节点称为根节点
- 每棵树最多有一个根节点
- 空树没有根节点
- 父节点: 与一个节点直接连接,并且在它的头上的节点即是它的父节点
- 子节点: 与一个节点直接连接,并且在它的底下的节点即是它的子节点
- 兄弟节点: 与同一个父节点直接连接的所有节点都是兄弟节点
- 节点的度(degree): 一个节点的子树的个数称为该节点的度
- 一个节点底下伸出几个子节点,该节点的度就为几
- 叶子节点(leaf): 没有伸出任何子节点的节点即为叶子节点
- 叶子节点的度为0
- 非叶子节点: 至少有一个子节点的节点即是非叶子节点
- 非叶子节点的度不为0
- 空树: 没有任何节点的树叫做空树
- 子树: 分为左子树和右子树
- 左子树: 以左子节点为根节点形成的树称为左子树
- 右子树: 以右子节点为根节点形成的树称为右子树
- 树的度: 树中所有的节点的度中,最大值的度即为树的度
- 层数(level): 根节点所在的层数为第1层,根节点的子节点在第2层,依次类推(有的教程是从第0层开始计算)
- 节点的深度(depth): 从根节点到当前节点的简单路径上的节点总数即为节点的深度
- 节点的高度(height): 从当前节点到最远叶子节点的简单路径上的节点总数即为节点的高度
- 树的高度: 所有节点高度中的最大值,根节点到最远叶子节点的节点个数
- 树的深度: 所有节点中深度的最大值,同样也是根节点到最远叶子节点的节点个数
- 树的高度等于树的深度
- 有序树(常用): 树中的任意节点的子节点之间有顺序关系,所以不能调换兄弟节点的位置. (对节点进行了排序的树)
- 无序树: 树的任意节点的子节点之间没有顺序关系
二叉树(Binary Tree)
真二叉树(Proper Binary Tree)
- 真二叉树: 所有的节点的度要么是2,要么是0,度不能为1
满二叉树(Full Binary Tree)
- 所有的节点的度要么是2,要么是0,且所有的叶子节点都在最后一层(即每层节点都满排布)
完全二叉树(Complete Binary Tree)
- 叶子节点只会出现在最后2层,且最后1层的叶子节点都是靠左对齐
证明: 如果完全二叉树的总结点是n, 当 n为偶数时, 叶子节点数量 n0 = n /2 , 当n为奇数时, 叶子节点数量 n0 = (n + 1) / 2
二叉查找树(Binary Search Tree) (二叉搜索树)
平衡二叉树
红黑树(平衡二叉B树)
- 红黑树是一种自平衡的二叉查找树,是计算机科学中用到的一种数据结构,红黑树不是高度平衡的,它的平衡是通过"红黑规则"实现的
- 红黑规则