1. 树
即是以层次化方式组织和存放数据的特定数据结构
边: 节点与节点之间的连线
根节点:
叶子节点:
度: 节点的度数即为其分叉数, 即其子节点个数. 整棵树的度数是所有节点中度数的最大值
节点深度: 根节点到该节点的唯一路径长(即边的数量)
树高: 所有节点中深度的最大值
2. 二叉树
每个节点最多有两个子节点, 即左孩子和右孩子
平衡因子: 平衡因子是针对节点的一个概念, 节点左子树的深度与右子树的深度即为该节点的平衡因子.
2.1 二叉树遍历方式
2.2 完全二叉树
一棵二叉树, 除了最后一层之外, 每层节点都是满的, 且最后一层所有节点都尽可能靠左. 如果一棵树为完全二叉树, 那么其可以用数组的形式表示.
性质:
1. 具有n个节点的完全二叉树深度为, 这个向上取整的含义是, 假如n为8, 取对数的值正好为整数3, 但是也要向上取整, 层数便为4.
2. 具有奇数个节点的完全二叉树的度为1的节点个数为0, 而具有奇数个节点的完全二叉树的度为1的节点个数为1.
3.1 具有n个节点的完全二叉树, 如果节点从1开始编号, 对于第i个节点:
i = 1, 为根节点
i > 1, 父节点为i / 2(取整), 如果2 * i <= n, 左子节点为2 * i, 如果2 * i < n右子节点为2 * i + 1
3.2 具有n个节点的完全二叉树, 如果用数组形式表示, 对于下标i:
i = 0, 为根节点
i > 0, 父节点为(i - 1) / 2(取整), 如果2 * (i + 1) <= n, 左子节点为2 * i + 1, 如果2 * i < n右子节点为2 * i + 2
2.2.1 堆
堆是一种特殊的完全二叉树, 分为大顶堆和小顶堆, 大(小)顶堆即为所有节点的值均大(小)于等于其子节点(如果存在的话)的值. 如果用一个数组表示大顶堆(含有n个节点, 小顶堆相反), 对于下标为i的节点来说:
如果含有左子节点(2 * i + 1 < n), 那么有heap[i] >= heap[2 * i + 1] (右子节点省略)
堆可以用来排序
2.2.2 满二叉树
满二叉树即为最后一层也是满的完全二叉树, 即节点总数满足.
2.3 二叉搜索(查找)树
性质:
树上任意一个节点均满足, 如果去左子树不为空, 那么其左子树上所有节点的值均小于等于其节点值, 右子树如果不为空, 那么右子树所有节点的值均大于等于其节点值. 增删查的时间复杂度理想情况下是, 最坏情况是.
2.4 平衡二叉树
性质:
所有节点的平衡因子的绝对值均不大于1的树.