- 博客(49)
- 收藏
- 关注
原创 [Leetcode]Reverse Linked List II
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *re
2013-07-04 20:13:46 357
原创 [Leetcode]Binary Tree Inorder Traversal without recursion
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Soluti
2013-07-04 10:30:45 452
原创 卡塔兰数 Catalan Number
组合数学中有非常多的组合结构可以用卡塔兰数来计数,下面是卡塔兰数的两个递推公式。其中有一类问题:不同构二叉树、不同构满二叉树、凸多边形三角化、乘法顺序不同构二叉树:Cn表示有n个节点组成不同构二叉树的方案数不同构满二叉树:Cn表示2n+1个节点组成的不同构满二叉树的方案数凸多边形三角化:Cn表示n+2边形三角化方案数乘法顺序:Cn表示
2013-06-29 16:06:58 829
原创 [Leetcode]Interleaving String
思路:刚开始的思路是从s3中一个个把字符拿出来,与s1和s2中的字符比较,如果匹配则去掉那个匹配的字符,但是问题是如果s1和s2的字符与s3中的都匹配呢?首先先到用递归,当都匹配时,递归的选择s1或者s2。但是这个递归有效率问题,有大量的重叠子问题,不用说,动态规划解决之。class Solution {public: bool isInterleave(string s1, str
2013-06-29 15:48:59 452
原创 [Leetcode]Validate Binary Search Tree
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Soluti
2013-06-29 14:37:19 371
原创 [Leetcode]Binary Tree Level Order Traversal II
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Soluti
2013-06-29 10:28:56 415
原创 [Leetcode]Binary Tree Zigzag Level Order Traversal
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Soluti
2013-06-29 10:24:12 301
原创 [Leetcode]Binary Tree Level Order Traversal
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Soluti
2013-06-29 10:12:16 356
原创 [Leetcode]Symmetric Tree
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Soluti
2013-06-29 09:46:47 351
原创 [Leetcode]Same Tree
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Soluti
2013-06-29 09:32:44 307
原创 [Leetcode]Convert Sorted Array to Binary Search Tree
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Soluti
2013-06-28 11:28:35 359
原创 [Leetcode]Convert Sorted List to Binary Search Tree
思路:从链表来建树关键的在于找到中间节点,并且自底向上的来建立。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; *//** *
2013-06-28 11:22:57 347
原创 [Leetcode]Balanced Binary Tree
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Soluti
2013-06-28 10:59:09 383
原创 [Leetcode]Minimum Depth of Binary Tree
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Soluti
2013-06-28 10:48:34 396
原创 [Leetcode]Path Sum
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Soluti
2013-06-28 10:41:35 368
原创 [Leetcode]Path Sum II
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Soluti
2013-06-28 10:39:01 381
原创 [Leetcode]Flatten Binary Tree to Linked List
思路:递归/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class
2013-06-28 10:03:06 403
原创 [Tree]Postorder fashion&Preorder fashion
对于树来说很多操作或者处理都可以归结成Postorder fashion和Preorder fashion(top-down自顶向下的更新和button-up自底向上的更新)
2013-06-27 11:04:40 384
原创 [geeks]Linked complete binary tree & its creation
思路:层序遍历往往和优先队列结合在一起一、初始化队列,用新节点初始化root,将root enqueue()二、重复下列步骤,知道所有的节点插入 1、得到队首节点(不出队) a) 如果该节点没有左子节点,该节点的左子节点为新节点 b) 否则 如果 该节点没有右子节点,该节点的右子节点为新节点 2、如果队首节点左右儿子节点都存在,则de
2013-06-26 16:53:51 425
转载 [geeks]Floor and Ceil from a BST
There are numerous applications we need to find floor (ceil) value of a key in a binary search tree or sorted array. For example, consider designing memory management system in which free nodes are ar
2013-06-26 15:15:57 1054
原创 [Tree]树与先序遍历
如果我们有一个先序遍历的数组或者一个链表,以它们来建立一棵树,但是又无法很好的划分左右子树,可以用下面的框架。 TreeNode *buildTree(vector &preorder, int &cur, int min, int max) { if(cur >= preorder.size()) return NULL; TreeNode *root = NULL; if(p
2013-06-26 15:04:16 444
原创 [Tree]树与中序遍历
对一棵二叉树进行中序遍历得到a0 a1...an...当遍历树时,如果处理当前节点时需要其中序遍历序列中前一个节点的信息,即访问an时需要an-1那么可以用下面的框架进行中序遍历。void fun(TreeNode *root, TreeNode* &prev){ if(root == NULL) return; fun(root->left, prev); //访问当前节点并
2013-06-26 14:36:30 391
原创 [Leetcode]Populating Next Right Pointers in Each Node II
思路:同Populating Next Right Pointers in Each Node/** * Definition for binary tree with next pointer. * struct TreeLinkNode { * int val; * TreeLinkNode *left, *right, *next; * TreeLinkNode(
2013-06-26 14:15:26 376
原创 [Leetcode]Populating Next Right Pointers in Each Node
思路:逐层处理/** * Definition for binary tree with next pointer. * struct TreeLinkNode { * int val; * TreeLinkNode *left, *right, *next; * TreeLinkNode(int x) : val(x), left(NULL), right(NULL), ne
2013-06-26 14:12:37 311
原创 [Leetcode]Distinct Subsequences
思路:计数问题往往用DPclass Solution {public: int numDistinct(string S, string T) { // Start typing your C/C++ solution below // DO NOT write int main() function vector > f(S.size
2013-06-26 14:09:32 431
原创 [剑指offer]用两个栈实现队列
思路:一个栈用来入队,另外一个栈用来出队#include #include #include #include #include using namespace std;int main(){ int n; while(cin>>n) { stack input, output; for(int i = 0; i < n; ++i) { string c
2013-06-25 17:06:30 344
原创 [剑指offer]重建二叉树
思路:递归建树#include #include #include #include #include using namespace std;struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}}
2013-06-25 16:35:07 359
原创 [剑指offer]替换空格
思路:与leetcode 里的 Merge Sorted Array相似#include #include #include #include using namespace std;int main(){ string s; while(getline(cin, s)) { int count = 0; for(int i = 0; i < s.size();
2013-06-25 15:34:18 377
原创 [Leetcode]Merge Sorted Array
思路:从后往前merge,这样可以不用额外的空间class Solution {public: void merge(int A[], int m, int B[], int n) { // Start typing your C/C++ solution below // DO NOT write int main() function
2013-06-25 14:38:44 336
原创 [geeks]Construct BST from given preorder traversal——iterative solution
步骤:1、建立一个空栈2、使preorder数组中的第一个元素为root,并把root推入栈中3、重复下面步骤直到遍历完preorder数组如果当前preorder数组中的元素大于栈中节点的值,pop栈顶元素,直到栈为空,或者栈顶节点的值大于preorder数组中的元素。令最后被pop出来的节点的右子树为当前元素,并将其push入栈。如果当前元素小于栈顶节点的值,那么令栈顶节点
2013-06-25 11:26:02 492
原创 [geeks]Construct BST from given preorder traversal
思路一:preorder数组的第一个元素为根,然后从左到右开始找第一个大于根的元素,递归的构造左右子树,时间复杂度O(n)。思路二:一边遍历preorder数组一边构造BSTstruct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(N
2013-06-25 10:41:29 468
原创 [geeks]Construct Full Binary Tree from given preorder and postorder traversals
思路:根据先序和后序遍历数据,递归的构造整棵树struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};class Solution {public: TreeNode *buildTree(ve
2013-06-25 09:30:39 515
转载 [Tree]If you are given two traversal sequences, can you construct the binary tree?
If you are given two traversal sequences, can you construct the binary tree?August 2, 2009It depends on what traversals are given. If one of the traversal methods is Inorder then the tree
2013-06-24 22:12:43 431
原创 [geeks]Two of the nodes of a Binary Search Tree (BST) are swapped. Fix (or correct) the BST
思路:同leetcode中Recover Binary Search Tree
2013-06-24 22:03:14 573
原创 [Leetcode]Recover Binary Search Tree
思路:如果我们可以用额外的数组得到中序遍历的结果,那么我么可以相对容易的解决这个问题。不用额外的空间,可以用O(N)的时间通过中序遍历整棵树来解决。对于每次访问到一颗子树,我们需要然它知道它的前一个节点。方法一:/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *
2013-06-24 21:57:12 411
原创 [剑指Offer]二维数组中的查找
思路:这题二维矩阵少了Leetcode中的一个限制,就是这一行的最左边的值并一定比前一行的最右边的值大。我们同样也是先找到所在行,然后在该行二分查找,但是定位所在行的方式需要改变。#include #include #include using namespace std;bool SearchMatrix(vector > &matrix, int target) { if(
2013-06-24 17:10:55 477
原创 [Leetcode]Search a 2D Matrix
思路:用经典的二分查找,先找到所在行,然后再找到所在列class Solution {public: bool searchMatrix(vector > &matrix, int target) { // Start typing your C/C++ solution below // DO NOT write int main() function
2013-06-24 15:42:48 380
原创 [Leetcode]Triangle
空间O(N^2)class Solution {public: int minimumTotal(vector > &triangle) { // Start typing your C/C++ solution below // DO NOT write int main() function for(int i = triangle
2013-06-24 10:25:08 381
原创 [Leetcode]Best Time to Buy and Sell Stock III
思路:III限制了只能进行两次交易,问题可以转化成在两个不重叠区间找到i和j(iclass Solution {public: int maxProfit(vector &prices) { // Start typing your C/C++ solution below // DO NOT write int main() function
2013-06-24 09:59:23 539
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人