算法
qq_34576910
用心去喜欢代码
展开
-
归并排序
归并排序原创 2016-04-07 18:45:06 · 221 阅读 · 0 评论 -
leetcode 105 & 106
105c++(16ms)TreeNode* get(vector<int>& preorder,int p_start,int p_end, vector<int>& inorder,int i_start,int i_end) { TreeNode*root = new TreeNode(preorder[p_start]); int pos = distance(原创 2017-07-30 23:09:56 · 297 阅读 · 0 评论 -
判断二叉树是否为镜像对称
leetcode 101思路:将左右两个对称的树元素分前后送入队列,判断时一次取两个进行判断struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};bool isSymmetric(TreeNod原创 2017-07-20 12:06:46 · 470 阅读 · 0 评论 -
四根柱子处理汉诺塔问题的最少次数
经典的汉诺塔问题经常作为一个递归的经典例题存在。可能有人并不知道汉诺塔问题的典故。汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一回只能移动一个圆盘。有预言说,这件事完成时宇宙会在一瞬间闪电式毁灭。也有人相信婆罗门至今仍原创 2016-12-11 19:35:32 · 12202 阅读 · 1 评论 -
二叉树的重建--已知中序和前序或中序和后序逆向构建二叉树
该程序的前提是每个节点的数值是一个字符。 其实,这种问题的难点在于字符串的处理和递归的使用。 前序遍历:根左右; 中序遍历:左根右; 后序遍历:左右根; 遍历代码见该博“二叉树创建与遍历”一文观察得到,每次递归根节点一定存在,且根节点为后序遍历的最后一个(前序遍历的第一个)。而在中序遍历中,由后序遍历获取的根节点被左右子节点‘包围’。该节点在中序位置前面为左子树部分,右原创 2016-11-03 17:04:32 · 483 阅读 · 0 评论 -
二叉树的构造及遍历
自定义二叉树类型struct tree{ char v; //记录节点内容 int node; //记录该节点在数组中的位置 tree *left,*right; //链表构建时的左右节点 bool have_value; //判断该节点是否存在数字 tree():have_value(0),left(NULL),right(NULL) {}; //构造函原创 2016-11-03 14:59:36 · 317 阅读 · 0 评论 -
BFS和DFS求最短路径的C++代码实现
BFS和DFS的C++代码实现数据结构体struct node{ int x,y; int step;};安全函数bool safe(node st){ if(st.x >= 0 && st.y >= 0 && !vis[st.x][st.y] && map[st.x][st.y] != '#') return true; return false;}原创 2016-10-22 21:19:52 · 2498 阅读 · 0 评论 -
快速排序
最近在看刘佳汝老师的算法书,在快速排序这部分没有给出代码,于是在网上寻找。 void quick_sort(int * a,int x,int y) //输入需要排序的数组,起始下标,尾下标 { if(y > x) { int tmp = a[x]; int i = x,j = y; while(i != j)原创 2016-04-07 22:39:02 · 245 阅读 · 0 评论 -
链表排序
常用链表有两种,单链表和双向链表。 单链表:在链表基础的结构体中有一个指针,指向下一个或者上一个。 双链表:跟单链表差不多,不过有两个指针,分别指向前和后。最近在学习链表的排序,下面使用单链表配合冒泡法完成排序。 (使用的双链表,但仅用单链表的功能)链表基础结构体typedef struct data{ int a; struct data *next; struct原创 2016-04-21 22:38:47 · 301 阅读 · 0 评论 -
leetcode 417. Pacific Atlantic Water Flow
题目大意就是求出,能同时流向大西洋和太平洋的坐标集合int vis[4][2] = {0,1,1,0,0,-1,-1,0}; vector<pair<int,int>> np; bool ret1[160][160],ret2[160][160]; int see1[160][160],see2[160][160]; void dfs(int see[][160],ve原创 2017-07-23 23:54:55 · 249 阅读 · 0 评论