【转】各种二叉树
数据库中的数据一般是放在磁盘里面,存取数据的时候就要访问磁盘, 物理访问过程:盘片旋转,磁臂移动 两个过程。盘片旋转到指定位置之后,移动磁臂开始进行数据的存取。 那么存取数据的时间(快慢)主要是在哪部分消耗呢?主要就是 定位 过程消耗的。 所以:考虑到提高存取数据的速率,实际上就是减少磁盘定位(I/O操作)的次数。 来举个例子。来 顺序查找 。 查找5的时候,从头到尾的遍历,一共需要定位5次。不用再赘述,显然这样的顺序查找是最低效的。 为了提高效率,来 二叉树 。 二叉树的规范我就不说了, 一共6个数,无论查找哪个数,最多也就定位3次。 嗯,既然二叉树这么方便,那大家都用二叉树好了。额,其实图一那种情况,也算是二叉树,那算是一种情况。如果无法保证提高效率的稳定性,那这种结构还是不好。 (在这里记录一个知识点) 先序,中序,后序遍历。说一点就好,这里的先中后,说的是根节点。 为了提升稳定性,来 平衡二叉树 。 平衡二叉树用平衡因子差值来判断是否平衡,并旋转二叉树。平衡因子:左右子树高度差。平衡二叉树里平衡因子不能超过1,否则旋转。 长叹一口气,这样稳定了吧? 稳定是稳定,但是为了二叉树的稳定,牺牲了一些更重要的东西——时间。 当新增删除数据导致的旋转二叉树时,很耗时间的! 所有的操作的目的都是为了节省时间,提高效率。这样操作舍本逐末了。但也不是丝毫没有可取之处。 使用场景