目录
1、为什么要用树表查询
2、二叉排序树
2.1二叉排序树的定义
注意子树左边是小于,而右边是大于等于。
2.2二叉排序树的操作-查找
2.3用二叉链表存储二叉排序树
一个数据域,两个左右孩子节点
2.4二叉排序树递归查找的算法与思想
2.5二叉排序树的查找分析
不同的二叉排序树平均查找长度的例子:
2.6二叉排序树的操作-插入
此时不用考虑效率平衡的问题,只需要不断地查找知道某个叶子结点的左子树或右子树为空,节点为该叶子节点的左孩子或右孩子
2.7二叉排序树的操作-生成
2.8二叉排序树的操作-删除
2.8.1删除节点要考虑的两点
1.要保证删除后的重新连接的二叉树还是二叉排序树,中序遍历后还是一个递增的有序序列
2.要保证重新连接的而二叉树树的高度不能增加
2.8.2若被删除结点节点为叶子节点
2.8.3若被删除节点只有左子树或只有右子树
2.8.4若被删除节点既有左子树又有右子树
因为要满足二叉排序树的中序排列必须是递增的有序序列,所以用中序遍历的前驱节点或后继节点来代替它,中序遍历的前驱节点是左子树中最大的节点,中序遍历的后继节点是右子树中最小的节点。
2.8.5 三种情况删除的例子:
3、平衡二叉树
3.1为什么要用平衡二叉树
为了提高二叉排序树的查找效率,所以要对二叉排序树进行平衡化处理
3.2平衡二叉树的定义
3.3平衡二叉树失衡的调整
最小失衡子树根节点是说子根是最少的失衡的节点。
按照中序遍历的顺序,把数值排序第二的节点作为根节点,然后在保持二叉树的特性就OK了。
3.3.1四种失衡二叉排序树的具体过程
LL型,RR型,RL型,LR型是根据最小失衡子树根节点来作为判断的,LL就是左子树的左子树插入一个节点造成失衡,但是不一定是根节点必须移动。
因为此时是7节点为最小失衡子树的根节点,所以此时为RL型,此时就应该选择中间的9节点作为7与11的根节点,最后把插入的8节点作为7节点的右子树
3.4给出数值构造平衡二叉树的例题