Skip to content

Commit d9f123d

Browse files
committed
added 116, 117, 173
1 parent 7443e50 commit d9f123d

3 files changed

+138
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*
2+
116. Populating Next Right Pointers in Each Node
3+
4+
Submitted: December 8, 2024
5+
6+
Runtime: 11 ms (beats 82.54%)
7+
Memory: 18.81 MB (beats 73.03%)
8+
*/
9+
10+
/*
11+
// Definition for a Node.
12+
class Node {
13+
public:
14+
int val;
15+
Node* left;
16+
Node* right;
17+
Node* next;
18+
19+
Node() : val(0), left(NULL), right(NULL), next(NULL) {}
20+
21+
Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {}
22+
23+
Node(int _val, Node* _left, Node* _right, Node* _next)
24+
: val(_val), left(_left), right(_right), next(_next) {}
25+
};
26+
*/
27+
28+
class Solution {
29+
public:
30+
Node* connect(Node* root) {
31+
if (root == nullptr) return nullptr;
32+
if (root->left == nullptr) return root;
33+
root->left->next = root->right;
34+
for (Node* p = root; p->next != nullptr; ) {
35+
p->right->next = p->next->left;
36+
p = p->next;
37+
p->left->next = p->right;
38+
}
39+
connect(root->left);
40+
return root;
41+
}
42+
};
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
116. Populating Next Right Pointers in Each Node
3+
4+
Submitted: December 8, 2024
5+
6+
Runtime: 11 ms (beats 48.73%)
7+
Memory: 18.80 MB (beats 35.89%)
8+
*/
9+
10+
/*
11+
// Definition for a Node.
12+
class Node {
13+
public:
14+
int val;
15+
Node* left;
16+
Node* right;
17+
Node* next;
18+
19+
Node() : val(0), left(NULL), right(NULL), next(NULL) {}
20+
21+
Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {}
22+
23+
Node(int _val, Node* _left, Node* _right, Node* _next)
24+
: val(_val), left(_left), right(_right), next(_next) {}
25+
};
26+
*/
27+
28+
class Solution {
29+
public:
30+
Node* connect(Node* root) {
31+
if (root == nullptr) return nullptr;
32+
deque<Node*> queue;
33+
queue.push_back(root);
34+
while (!queue.empty()) {
35+
for (int i = 0, n = queue.size(); i < n; ++i) {
36+
Node* p = queue.back();
37+
queue.pop_back();
38+
if (i < n - 1) p->next = queue.back();
39+
if (p->left != nullptr) queue.push_front(p->left);
40+
if (p->right != nullptr) queue.push_front(p->right);
41+
}
42+
}
43+
return root;
44+
}
45+
};

0173-binary-search-tree-iterator.cpp

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*
2+
173. Binary Search Tree Iterator
3+
4+
Submitted: December 8, 2024
5+
6+
Runtime: 3 ms (beats 70.78%)
7+
Memory: 32.22 MB (beats 6.21%)
8+
*/
9+
10+
/**
11+
* Definition for a binary tree node.
12+
* struct TreeNode {
13+
* int val;
14+
* TreeNode *left;
15+
* TreeNode *right;
16+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
17+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
18+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
19+
* };
20+
*/
21+
class BSTIterator {
22+
private:
23+
vector<int> arr;
24+
vector<int>::const_iterator pos;
25+
void traverse(TreeNode* root) {
26+
if (root == nullptr) return;
27+
traverse(root->left);
28+
arr.push_back(root->val);
29+
traverse(root->right);
30+
}
31+
public:
32+
BSTIterator(TreeNode* root) {
33+
traverse(root);
34+
pos = arr.cbegin();
35+
}
36+
37+
int next() {
38+
return *pos++;
39+
}
40+
41+
bool hasNext() {
42+
return pos != arr.cend();
43+
}
44+
};
45+
46+
/**
47+
* Your BSTIterator object will be instantiated and called as such:
48+
* BSTIterator* obj = new BSTIterator(root);
49+
* int param_1 = obj->next();
50+
* bool param_2 = obj->hasNext();
51+
*/

0 commit comments

Comments
 (0)