平衡二叉树介绍 平衡二叉树,是一种二叉排序树,其中每一个节点的左子树和右子树的高度差最多等于1。由3位科学家共同发明,用他们首字母命名 又被称为AVL树。从平衡二叉树的名称,你也可以体会到它是一种高度平衡的二叉排序树。我们将二叉树上结点的左子树深度减去右子树的深度的值称为平衡因子BF,那么平衡二叉树上的所有结点的平衡因子只能是-1,0,1。 平衡二叉树的实现原理 平衡二叉树构建的基本思想就在在构建二叉排序树的过程中,每当插入一个结点时,先检查否是因为插入而破坏了树的平衡性,若是,这找出最小不平衡树,在满足二叉排序树…

2018年4月28日 0条评论 6点热度 阅读全文

平衡二叉树介绍 平衡二叉树,是一种二叉排序树,其中每一个节点的左子树和右子树的高度差最多等于1。由3位科学家共同发明,用他们首字母命名 又被称为AVL树。从平衡二叉树的名称,你也可以体会到它是一种高度平衡的二叉排序树。我们将二叉树上结点的左子树深度减去右子树的深度的值称为平衡因子BF,那么平衡二叉树上的所有结点的平衡因子只能是-1,0,1。 平衡二叉树的实现原理 平衡二叉树构建的基本思想就在在构建二叉排序树的过程中,每当插入一个结点时,先检查否是因为插入而破坏了树的平衡性,若是,这找出最小不平衡树,在满足二叉排序树…

2018年4月28日 0条评论 7点热度 阅读全文

平衡二叉树介绍 平衡二叉树,是一种二叉排序树,其中每一个节点的左子树和右子树的高度差最多等于1。由3位科学家共同发明,用他们首字母命名 又被称为AVL树。从平衡二叉树的名称,你也可以体会到它是一种高度平衡的二叉排序树。我们将二叉树上结点的左子树深度减去右子树的深度的值称为平衡因子BF,那么平衡二叉树上的所有结点的平衡因子只能是-1,0,1。 平衡二叉树的实现原理 平衡二叉树构建的基本思想就在在构建二叉排序树的过程中,每当插入一个结点时,先检查否是因为插入而破坏了树的平衡性,若是,这找出最小不平衡树,在满足二叉排序树…

2018年4月28日 0条评论 3点热度 阅读全文

插值查找算法介绍 插值查找(Interpolation Search)是根据要查找关键字key与查找表中最大最小记录的关键字比较后的查找方法,其核心就在于插值的计算公式key-arr[low]/arr[high]-arr[low]。细看是不是key在整序列中的占比哟。所以mid的计算公式为: (high-low)*(key-arr[low])/(arr[high]-arr[low])。对比折半查找的mid = (high-low)/2。 代码和折半查找一模一样,唯独mid的计算方式发生改变。这样的好处在于,对表长较…

2018年2月27日 0条评论 2点热度 阅读全文

插值查找算法介绍 插值查找(Interpolation Search)是根据要查找关键字key与查找表中最大最小记录的关键字比较后的查找方法,其核心就在于插值的计算公式key-arr[low]/arr[high]-arr[low]。细看是不是key在整序列中的占比哟。所以mid的计算公式为: (high-low)*(key-arr[low])/(arr[high]-arr[low])。对比折半查找的mid = (high-low)/2。 代码和折半查找一模一样,唯独mid的计算方式发生改变。这样的好处在于,对表长较…

2018年2月27日 0条评论 2点热度 阅读全文

插值查找算法介绍 插值查找(Interpolation Search)是根据要查找关键字key与查找表中最大最小记录的关键字比较后的查找方法,其核心就在于插值的计算公式key-arr[low]/arr[high]-arr[low]。细看是不是key在整序列中的占比哟。所以mid的计算公式为: (high-low)*(key-arr[low])/(arr[high]-arr[low])。对比折半查找的mid = (high-low)/2。 代码和折半查找一模一样,唯独mid的计算方式发生改变。这样的好处在于,对表长较…

2018年2月27日 0条评论 3点热度 阅读全文

折半查找算法介绍 折半查找(Binary Search)又称为二分查找。它的前提是线性表中的记录必须是关键码有序(通常从小到大有序),线性表必须采用顺序存储。从算法名称可以看出算法的思路,先取有序序列中间值与查找值进行比较,中间值小于查找值 就查找后一子表,如果中间值大于查找值 就查前移子表,直到查找到或者子表不存在为止。由于折半查找的查找范围是成倍的缩写,所以折半查找法的算法时间复杂度为logn。 折半查找算法代码 代码简单哟,因为我们并不知道循环次数,所以优先采用的while 循环,当然for、while、do…

2018年2月27日 0条评论 3点热度 阅读全文

实现思路 我们来看看下图的二叉链表 如何实现层序遍历。 层序遍历顺序:ABECDG A为B、E的双亲结点,遍历顺序是 根->左->右 是不是。 而且每个结点都是这样的遍历顺序 有木有。那么我们完全可以采用队列的数据结构呗。A入队->然后出队,出队时将其左右孩子入队,循环队列进行出队,每次出队将其左右孩子入队。当队列为空时,整棵树层序遍历完毕。还没明白请看下面过程。A->出队 队列:E、B B->出队 队列:D、C、E E->出队 队列:G、D、C C->出队 队列:G、D …

2018年2月26日 0条评论 5点热度 阅读全文

实现思路 我们来看看下图的二叉链表 如何实现层序遍历。 层序遍历顺序:ABECDG A为B、E的双亲结点,遍历顺序是 根->左->右 是不是。 而且每个结点都是这样的遍历顺序 有木有。那么我们完全可以采用队列的数据结构呗。A入队->然后出队,出队时将其左右孩子入队,循环队列进行出队,每次出队将其左右孩子入队。当队列为空时,整棵树层序遍历完毕。还没明白请看下面过程。A->出队 队列:E、B B->出队 队列:D、C、E E->出队 队列:G、D、C C->出队 队列:G、D …

2018年2月26日 0条评论 8点热度 阅读全文

邻接表介绍 邻接矩阵是不错的一种图存储结构,但是我们也发现,对于边数相对顶点较少的图,这种结构比较较浪费存储空间。如果不想浪费存储空间,大家肯定会先到链表。需要空间的时候再才想内存去申请,同样适用于图的存储。我们把这种数组与链表相结合的存储方式成为邻接表(Adjacency List)。关于邻接矩阵的详细介绍请看:图:图的邻接矩阵创建、深度优先遍历和广度优先遍历详解 。 邻接表创建图 我们创建边表的单链表时,可以使用头插法和尾插法创建,不过尾插法要麻烦一点,需要先创建头结点,最后还要释放头结点,不过2种方…

2018年2月20日 0条评论 6点热度 阅读全文