随笔分类 -  数据结构

欧拉回路
摘要:欧拉回路:图G,若存在一条路,经过G中每条边有且仅有一次,称这条路为欧拉路,如果存在一条回路经过G每条边有且仅有一次,称这条回路为欧拉回路。具有欧拉回路的图成为欧拉图。判断欧拉路是否存在的方法有向图:图连通,有一个顶点出度大入度1,有一个顶点入度大出度1,其余都是出度=入度。无向图:图连通,只有两个顶点是奇数度,其余都是偶数度的。判断欧拉回路是否存在的方法有向图:图连通,所有的顶点出度=入度。无向图:图连通,所有顶点都是偶数度。程序实现一般是如下过程:1.利用并查集判断图是否连通,即判断p[i] < 0的个数,如果大于1,说明不连通。2.根据出度入度个数,判断是否满足要求。3.利用dfs 阅读全文

posted @ 2012-04-15 15:54 buptLizer 阅读(16968) 评论(3) 推荐(7) 编辑

stack and queue一些应用
该文被密码保护。

posted @ 2012-04-05 20:44 buptLizer 阅读(25) 评论(0) 推荐(0) 编辑

BSTree中查找第k小的数
只有注册用户登录后才能阅读该文。

posted @ 2012-04-01 10:52 buptLizer 阅读(36) 评论(0) 推荐(0) 编辑

判断两个二叉树是否同构(相似)
摘要:题目: 给出两个二叉树的根结点,判断这两个二叉树是否同构,同构即表示两棵树形状形式,只是value不同而已。 直接递归判断。bool _istongG(Node* t1, Node* t2){ if(NULL == t1 || NULL == t2) return (NULL == t1) && (NULL == t2); return _istongG(t1->left, t2->left) && _istongG(t1->right, t2->right);} 阅读全文

posted @ 2012-03-30 13:24 buptLizer 阅读(6956) 评论(0) 推荐(0) 编辑

判断二叉树是否是完全二叉树
摘要:题目: 给出一个二叉树,判断是否是完全二叉树。分析:我们都知道完全二叉树是指最后一层左边是满的,右边可能慢也不能不满,然后其余层都是满的,根据这个特性,利用层遍历,如果我们当前遍历到了NULL结点即叶结点,那么后续如果还有非叶结点,就说明是非完全二叉树,所以利用队列,代码比较简单了。View Code bool is_completeTree(Node* r){ queue<Node*> q; if(NULL != r) { q.push(r); Node* cur = NULL; bool flag = false; ... 阅读全文

posted @ 2012-03-30 13:21 buptLizer 阅读(8115) 评论(0) 推荐(0) 编辑

poj1330Nearest Common Ancestors LCA问题 dfs+rmq
摘要:题目意思很简单就是求两个节点的LCA,这个问题可以转化为rmq问题,求区间的最小值。就是首先利用dfs遍历图的所有顶点并且每条边会遍历两次,这样遍历的顶点总共2*n-1个,依次将遍历的边存在数组e[i]中,并且记录每个顶点的深度,存入数组level[i]中,我们再开一个数组存每一个顶点首次出现的下标,记录在idx中,这样任意给出两个顶点,我们求出他们对应的下标x,y,然后根据level数组在区间[x,y]中找出深度最小的下标r,这个下标对应的e就是我们要求的节点。这个题目就是将LCA转化为在某段区间中找高度最小的那个顶点。代码如下:#include <iostream>#inclu 阅读全文

posted @ 2011-09-16 21:46 buptLizer 阅读(232) 评论(0) 推荐(0) 编辑

优先队列使用
摘要:这个是转得网上的,由于不经常使用,偶尔用的时候还经常出错,所以记下来了,经常使用的已经用红色颜色标出来了 :在优先队列中,优先级高的元素先出队列。标准库默认使用元素类型的<操作符来确定它们之间的优先级关系。优先队列的第一种用法,也是最常用的用法:priority_queue<int>qi;通过<操作符可知在整数中元素大的优先级高。故示例1中输出结果为:9 6 5 3 2第二种方法:在示例1中,如果我们要把元素从小到大输出怎么办呢?这时我们可以传入一个比较函数,使用functional.h函数对象作为比较函数。priority_queue<int,vector< 阅读全文

posted @ 2011-09-11 17:48 buptLizer 阅读(5597) 评论(1) 推荐(0) 编辑

导航