模板理解
我爱学习!嗯!
这个作者很懒,什么都没留下…
展开
-
二叉排序树(二叉查找树)
一、定义二叉排序树或者是一颗空树,或者是具有以下性质的二叉树:(1)若它的左子树不为空,则其左子树上所有结点的值均小于它的根结点的值(2)若它的右子树不为空,则其右子树上所有结点的值均大于它的根结点的值(3)它的左、右子树均为二叉排序树由定义可以得出,中序遍历二叉树可以得到一个结点值递增的有序序列。一个简单的二叉排序树:这里使用二叉链表来作为存储结点,结点类的...原创 2019-04-07 10:35:28 · 2860 阅读 · 0 评论 -
二叉平衡树
目录一、定义二、二叉平衡树调整三、二叉平衡树的插入四、二叉平衡树的删除一、定义平衡二叉树或则是空树,或者是具有如下特征的二叉排序树(1)左子树和右子树的深度之差的绝对值不超过1;(2)左子树和右子树也是平衡二叉树平衡二叉树的查找的时间复杂度是O(log n)。某结点的平衡因子:该结点左右子树深度之差。示例:二、二叉平衡树调整 ...原创 2019-04-13 16:58:51 · 545 阅读 · 0 评论 -
希尔排序&冒泡排序
1、希尔排序将数组中每间隔为d的元素划分为同一组,然后对每一组使用插入排序。d有多个值,但要求最后一个值为1,即最后一次要进行插入排序。例如数组:2 9 1 3 6 3,如果d为2,那么2、1、6为一组;9、3、3为一组;1、6为一组,3、3位一组,对每组都进行插入排序。//t为要排序的数组,l为存储d的数组,最后一个d必须为1public void shellSort(List<In...原创 2019-05-02 18:53:15 · 1127 阅读 · 0 评论 -
快速排序&归并排序
1、快速排序快速排序利用分治的思想,首先选取一个哨兵,将数组中大于哨兵的元素放到一边,小于数组的元素放到另一边,然后对两边也进行相同的操作。public void quickSort(List<Integer> t){ quickSort(t,0,t.size()-1);}private void quickSort(List<Integer> t,int l,i...原创 2019-05-02 20:12:54 · 278 阅读 · 0 评论 -
红黑树
一、定义 树中每个结点包括五个属性:key,color,left,right和p。如果一个结点没有子结点或父结点,则其left,right 或 p 指向NIL结点。可以把NIL视为指向红黑树的叶结点。 红黑树是满足一下性质的二叉搜索树(二叉排序树): 1.每个结点是红色或黑色的。 2.根节点是黑色的。 3.每个叶结点(NIL)是黑色的。 4.红色结点的两个子结点都是黑色的。...原创 2019-04-29 22:25:34 · 192 阅读 · 1 评论 -
堆排序&优先队列
1、堆(二叉)堆是一个数组,它可以被近似看成是一颗完全二叉树。树上的每一个结点都对应数组的一个元素。除了最底层,该树是完全充满的,该树在数组中是从左向右填充的。表示堆的数组A通常包括两个属性:数组长度A.length和堆的元素个数A.heapSize。给定一个结点的下标i,可以知道它的父结点、左孩子和右孩子的下标分别为i/2、2i和2i+1。...原创 2019-05-08 20:04:02 · 245 阅读 · 0 评论