名词解析
度:每个节点的子树数量
树高:树的层数
根节点:最顶层的节点
左子节点:父节点左下方的节点
右子节点:父节点右下方的节点
根节点的左子树:根节点的左子节点及其子节点下方的所有节点
根节点的右子树:根节点的右子节点及其子节点下方的所有节点
节点中存储的内容:
二叉树
度小于等于2的数
查找规则(前中后表示的是遍历时,当前节点的位置):
前序:当前节点,左节点,右节点
中序:左节点,当前节点,右节点
后续:左节点,邮寄诶单,当前节点
层序:按层进行遍历
二叉查找树
二叉查找树的规则为:小的存右边,大的村左边,一样的不存
二叉查找树的弊端为:会出现长短腿的现象
平衡二叉树(AVL)
-
平衡二叉树插入规则同二叉查找树一样,小的存右边,大的村左边,一样的不存
-
平衡二叉树是通过旋转机制来保障平衡的,旋转的规则是:当任意一节点的高度差大于1时,进行旋转(即任意一个节点的左右子树的高度差大于1时进行旋转(通过过插入节点开始,不断的王父节点查找不平衡点))
-
旋转分为左旋和右旋
- 左旋:左旋有两种情况
1. 当不平衡点的左节点不存在右节点:直接右旋即可
2. 当不平衡点的左节点存在右节点:右旋后需要,将不平衡点的左节点的右节点设置成不平衡点的左节点 - 右旋
- 当不平衡点的右节点不存在左节点: 直接左旋即可
- 当不平衡点的右节点存在左节点:将不平衡点向左拉,将补平衡点的右节点当成新支点,将右节点的左子树设置为不平衡点的右节点
- 左旋:左旋有两种情况
-
当平衡二叉树满足旋转规则时,旋转的四种情况
- 左左(当根节点的左子树的左子树有节点插入,导致的二叉树不平衡):直接使用右旋即可
- 左右(当根节点的左子树的右子树有节点插入,导致的二叉树不平衡):先以插入点的父节点为支点进行局部左旋,然后在进行右旋
- 右右(当根节点的右子树的右子树有节点插入,导致的二叉树不平衡):直接使用左旋
- 右左(当根节点的右子树的左子树有节点插入,导致的二叉树不平衡):先以插入点的父节点为支点进行局部右旋,然后在进行左旋