Skip to content

Commit 133a3c4

Browse files
committed
solutions for leetcode
0 parents  commit 133a3c4

10 files changed

+378
-0
lines changed

Binary_Tree_Level_Order_Traversal.cpp

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
* Definition for binary tree
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8+
* };
9+
*/
10+
class Solution {
11+
public:
12+
vector<vector<int>> levelOrder(TreeNode *root) {
13+
if(root == nullptr) return vector<vector<int>>();
14+
15+
vector<vector<int>> result;
16+
queue<TreeNode *> p, q;
17+
p.push(root);
18+
19+
vector<int> layer;
20+
TreeNode *t = nullptr;
21+
while(!p.empty()){
22+
t = p.front();
23+
24+
layer.push_back(t->val);
25+
if(t->left) q.push(t->left);
26+
if(t->right) q.push(t->right);
27+
28+
p.pop();
29+
if(p.empty()){
30+
swap(p, q);
31+
result.push_back(layer);
32+
layer.clear();
33+
}
34+
}
35+
36+
return result;
37+
}
38+
};
+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
* Definition for binary tree
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8+
* };
9+
*/
10+
class Solution {
11+
public:
12+
vector<vector<int>> levelOrderBottom(TreeNode *root) {
13+
if(root == nullptr) return vector<vector<int>>();
14+
15+
vector<vector<int>> result;
16+
queue<TreeNode *> p, q;
17+
p.push(root);
18+
19+
vector<int> layer;
20+
TreeNode *t = nullptr;
21+
while(!p.empty()){
22+
t = p.front();
23+
24+
layer.push_back(t->val);
25+
if(t->left) q.push(t->left);
26+
if(t->right) q.push(t->right);
27+
28+
p.pop();
29+
if(p.empty()){
30+
swap(p, q);
31+
result.insert(result.begin(), layer);
32+
layer.clear();
33+
}
34+
}
35+
36+
return result;
37+
}
38+
};
+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/**
2+
* Definition for binary tree
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8+
* };
9+
*/
10+
class Solution {
11+
public:
12+
vector<vector<int> > zigzagLevelOrder(TreeNode *root) {
13+
if(root == nullptr) return vector<vector<int>>();
14+
15+
vector<vector<int>> result;
16+
queue<TreeNode *> p, q;
17+
p.push(root);
18+
19+
vector<int> layer;
20+
bool flag = true;
21+
TreeNode *t = nullptr;
22+
while(!p.empty()){
23+
t = p.front();
24+
25+
layer.push_back(t->val);
26+
if(t->left) q.push(t->left);
27+
if(t->right) q.push(t->right);
28+
29+
p.pop();
30+
if(p.empty()){
31+
swap(p, q);
32+
if(flag){
33+
result.push_back(layer);
34+
flag = false;
35+
}else{
36+
reverse(layer.begin(), layer.end());
37+
result.push_back(layer);
38+
flag = true;
39+
}
40+
layer.clear();
41+
}
42+
}
43+
44+
return result;
45+
}
46+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/**
2+
* Definition for binary tree
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8+
* };
9+
*/
10+
class Solution {
11+
public:
12+
TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
13+
if(inorder.empty() || postorder.empty()) return nullptr;
14+
if(inorder.size() == 1 && postorder.size() == 1) return new TreeNode(inorder[0]);
15+
16+
unordered_map<int, int> map;
17+
for(int i = 0; i < inorder.size(); i++){
18+
map[inorder[i]] = i;
19+
}
20+
return build_tree_helper(inorder, 0, inorder.size()-1, postorder, 0, postorder.size()-1, map);
21+
}
22+
private:
23+
TreeNode *build_tree_helper(vector<int> &A, int l, int h, vector<int> &B, int s, int e, unordered_map<int, int> &map){
24+
if(l > h || s > e) return nullptr;
25+
26+
int k = map[B[e]] - l;
27+
TreeNode *root = new TreeNode(B[e]);
28+
root->left = build_tree_helper(A, l, l+k-1, B, s, s+k-1, map);
29+
root->right = build_tree_helper(A, l+k+1, h, B, s+k, e-1, map);
30+
31+
return root;
32+
}
33+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* Definition for binary tree
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8+
* };
9+
*/
10+
class Solution {
11+
public:
12+
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
13+
if(preorder.empty() || inorder.empty()) return nullptr;
14+
if(preorder.size() == 1 && inorder.size() == 1) return new TreeNode(preorder[0]);
15+
16+
unordered_map<int, int> map;
17+
for(int i = 0; i <inorder.size(); i++){
18+
map[inorder[i]] = i;
19+
}
20+
21+
return tree_helper(preorder, 0, preorder.size()-1, inorder, 0, inorder.size()-1, map);
22+
}
23+
private:
24+
TreeNode *tree_helper(vector<int> &A, int l, int h, vector<int> &B, int s, int e, unordered_map<int, int> &map){
25+
if(l > h || s > e) return nullptr;
26+
27+
int k = map[A[l]]-s;
28+
29+
TreeNode *root = new TreeNode(A[l]);
30+
root->left = tree_helper(A, l+1, l+k, B, s, s+k-1, map);
31+
root->right = tree_helper(A, l+k+1, h, B, s+k+1, e, map);
32+
33+
return root;
34+
}
35+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
* Definition for binary tree
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8+
* };
9+
*/
10+
class Solution {
11+
public:
12+
TreeNode *sortedArrayToBST(vector<int> &num) {
13+
if(num.empty()) return nullptr;
14+
if(num.size() == 1) return new TreeNode(num[0]);
15+
16+
return bst_helper(num, 0, num.size()-1);
17+
}
18+
private:
19+
TreeNode *bst_helper(vector<int> &A, int l, int h){
20+
if(l > h) return nullptr;
21+
22+
int m = l + (h-l)/2;
23+
TreeNode *root = new TreeNode(A[m]);
24+
root->left = bst_helper(A, l, m-1);
25+
root->right = bst_helper(A, m+1, h);
26+
27+
return root;
28+
}
29+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* struct ListNode {
4+
* int val;
5+
* ListNode *next;
6+
* ListNode(int x) : val(x), next(NULL) {}
7+
* };
8+
*/
9+
/**
10+
* Definition for binary tree
11+
* struct TreeNode {
12+
* int val;
13+
* TreeNode *left;
14+
* TreeNode *right;
15+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
16+
* };
17+
*/
18+
class Solution {
19+
public:
20+
TreeNode *sortedListToBST(ListNode *head) {
21+
if(head == nullptr) return nullptr;
22+
if(head->next == nullptr) return new TreeNode(head->val);
23+
24+
ListNode *p = head;
25+
ListNode *q = head->next->next;
26+
27+
while(q){
28+
if(q->next) q= q->next->next;
29+
else break;
30+
31+
p = p->next;
32+
}
33+
34+
q = p->next;
35+
p->next = nullptr;
36+
37+
TreeNode *root = new TreeNode(q->val);
38+
root->left = sortedListToBST(head);
39+
root->right = sortedListToBST(q->next);
40+
41+
return root;
42+
}
43+
};

linked_list_cycle.cpp

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* struct ListNode {
4+
* int val;
5+
* ListNode *next;
6+
* ListNode(int x) : val(x), next(NULL) {}
7+
* };
8+
*/
9+
class Solution {
10+
public:
11+
bool hasCycle(ListNode *head) {
12+
if(head == nullptr) return false;
13+
if(head->next == nullptr) return false;
14+
15+
ListNode *p = head;
16+
ListNode *q = head->next->next;
17+
18+
while(q && p != q){
19+
p = p->next;
20+
if(q->next) q = q->next->next;
21+
else break;
22+
}
23+
24+
if(p == q) return true;
25+
else return false;
26+
}
27+
};

linked_list_cycle_2.cpp

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* struct ListNode {
4+
* int val;
5+
* ListNode *next;
6+
* ListNode(int x) : val(x), next(NULL) {}
7+
* };
8+
*/
9+
class Solution {
10+
public:
11+
ListNode *detectCycle(ListNode *head) {
12+
if(head == nullptr) return nullptr;
13+
if(head->next == nullptr) return nullptr;
14+
15+
// p and q has to start from the same point
16+
ListNode *p = head;
17+
ListNode *q = head;
18+
19+
while(q){
20+
p = p->next;
21+
if(q->next) {
22+
q = q->next->next;
23+
}else break;
24+
25+
if(p == q) break;
26+
}
27+
28+
if(p != q) return nullptr;
29+
30+
q = head;
31+
while(q != p){
32+
p = p->next;
33+
q = q->next;
34+
}
35+
return p;
36+
}
37+
};

sort_list.cpp

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* struct ListNode {
4+
* int val;
5+
* ListNode *next;
6+
* ListNode(int x) : val(x), next(NULL) {}
7+
* };
8+
*/
9+
class Solution {
10+
public:
11+
ListNode *sortList(ListNode *head) {
12+
if(head == nullptr) return nullptr;
13+
if(head->next == nullptr) return head;
14+
15+
ListNode *p = head;
16+
ListNode *q = head->next->next;
17+
18+
while(q){
19+
if(q->next) q = q->next->next;
20+
else break;
21+
p = p->next;
22+
}
23+
q = p->next;
24+
p->next = nullptr;
25+
26+
ListNode *left = sortList(head);
27+
ListNode *right = sortList(q);
28+
return merge_list(left, right);
29+
}
30+
private:
31+
ListNode *merge_list(ListNode *left, ListNode *right){
32+
ListNode dummy(0);
33+
ListNode *d = &dummy;
34+
35+
while(left && right){
36+
if(left->val < right->val){
37+
d->next = left;
38+
left = left->next;
39+
d = d->next;
40+
}else{
41+
d->next = right;
42+
right = right->next;
43+
d = d->next;
44+
}
45+
}
46+
47+
if(left) d->next = left;
48+
if(right) d->next = right;
49+
50+
return dummy.next;
51+
}
52+
};

0 commit comments

Comments
 (0)