随笔分类 - Algorithm
摘要:先简单介绍一下二叉查找树吧,二叉查找树就是具有左子树的任一结点都不大于根结点,右子树的任一结点都不小于根结点这一性质的二叉树。对于它删除一个结点的算法,书上是分三种情况讨论的。 首先,要删除的结点z没有儿子,这种情况很简单,z是它父亲结点的哪个儿子,就让指向那个儿子的指针指空,z指向父亲结点的指针指空就可以了。 其次,要删除的结点z只有一个儿子,那么以z为根结点的子树,要么都不大于z的父亲结点,要么都不小于z的父亲结点,这时候让z的儿子中指向z的指针改指向z的父亲结点,z是它父亲结点的哪个儿子,就让指向那个儿子的指针指向z的儿子,再处理一下z的指针就可以了。 最后,最删除的结点z有两...
阅读全文
摘要:首先红黑树是一种接近平衡的二叉查找树,它的的性质如下:每个结点或是红的或是黑的。(也就是说,delete一个黑色结点y之后x结点带有双重颜色红黑或者黑黑,那么应该去掉一层红色或黑色,直接将x涂黑或者在根结点到x的路径上增加一个黑色结点,增加的方法后面会提到)根结点是黑的。(这是一个必须注意的性质,因为空红黑树根结点是nil哨兵结点,哨兵结点必须是黑色的)每个叶节点(nil结点)是黑的。(nil一定是黑色的,nil是红色的,将有可能会违反性质4)如果一个结点是红色的,则它的两个儿子都是黑的(也就是说红黑树中不可能出现连着的两个结点是红色的情况,一条路径至少是全黑的,至多是红黑交替的,也就解释..
阅读全文
摘要:今天在编写双链表代码时遇到了这样的困惑:函数参数传递时形参声明为1 strunct queue *&Q;想了半天*&Q的含义,百思不得其解,于是查阅了很多关于指针和引用的资料,总算解决了困惑。首先,简单回顾一下指针和引用这两种运算。1 int val;2 int *pv = &val; //指针声明3 int &rv = val; //引用声明当对引用类型初始化时,表示rv与val相关联,也可以理解为rv是val的别名,rv和val共用一块内存,地址相同,值相同。而&val中&出现在赋值号右边后成为了右值表达式,是一个常量,表示val的地址,这样
阅读全文
摘要:这段时间学习了算法导论中前八章的几种排序方法,有插入排序、合并排序、堆排序、快速排序、计数排序、基数排序和桶排序,其中插入排序、合并排序、堆排序和快速排序都属于比较排序,即算法的核心是比较数组的两个元素的大小来确定先后关系,基数排序、计数排序和桶排序属于线性时间排序,即时间呈输入规模的线性增长。是否为比较排序关系到排序方法的时间复杂度。以下只是学习过程中的一些总结,如有错误,欢迎釜正~~原地排序:原地排序是通过不申请额外的内存空间来进行排序,每次排序都没有或者有常数(1)个的元素存储在数组之外。1.插入排序,在排序的过程中用一个额外的变量key(也可以不申请)来保存当前需要比较大小的元素,然后
阅读全文

浙公网安备 33010602011771号