摘要: 二叉查找树(BST)是二叉树的一个重要的应用,它在二叉树的基础上加上了这样的一个性质:对于树中的每一个节点来说,如果有左儿子的话,它的左儿子的值一定小于它本身的值,如果有右儿子的话,它的右儿子的值一定大于它本身的值。二叉查找树的操作一般有插入、删除和查找,这几个操作的平均时间复杂度都为O(logn),插入和查找操作很简单,删除操作会复杂一点,除此之外,因为二叉树的中序遍历是一个有序序列,我就额外加上了一个中序遍历操作。二叉查找树的应用不是很多,因为它最坏的时候跟线性表差不多,大部分会应用到它的升级版,平衡二叉树和红黑树,这两棵树都能把时间复杂度稳定在O(logn)左右。虽然不会用到,但是二叉查 阅读全文
posted @ 2012-11-09 21:37 Mr.Rico 阅读(256) 评论(0) 推荐(0)
摘要: 平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树。1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵树,所以它 又叫AVL树。平衡二叉树要求对于每一个节点来说,它的左右子树的高度之差不能超过1,如果插入或者删除一个节点使得高度之差大于1,就要进行节点之间的 旋转,将二叉树重新维持在一个平衡状态。这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在 O(logN)。但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来说, 阅读全文
posted @ 2012-11-09 21:35 Mr.Rico 阅读(472) 评论(0) 推荐(0)
摘要: 握手问题:一对夫妇邀请N-1对夫妇参加聚会(因此聚会上总共有2N人)。每个人都和所有自己不认识的人握了一次手。然后,男主人问其余所有人(共2N-1个人)各自都握了几次手,得到的答案全部都不一样。假设每个人都认识自己的配偶,那么女主人握了几次手?答案:握手次数只可能是从0到2N-2这2N-1个数。除去... 阅读全文
posted @ 2012-11-09 21:31 Mr.Rico 阅读(640) 评论(0) 推荐(0)
摘要: 1. 利用stack计算整数表达式. 2. 硬币正面朝下, 第一次全部翻转, 第2次反转2的倍数(2,4,6,...), 第3次反转3的倍数(3,6,9...), 这样一直进行下去,操作100次, 问有多少正面朝上. 是1-2006之间的完全平方数,数的奇偶性,可以发现这个硬币号码的约数有几个,就会... 阅读全文
posted @ 2012-11-09 21:22 Mr.Rico 阅读(530) 评论(0) 推荐(0)
摘要: 1. multiset操作这儿是对STL各个容器的相关介绍. http://www.cplusplus.com/reference/stl/multiset比较重要的操作就是: insert, erase, count和find2. memcpy实现void *Memcpy(void *dst, c... 阅读全文
posted @ 2012-11-09 21:10 Mr.Rico 阅读(2061) 评论(0) 推荐(0)