Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e96084b

Browse files
committed
feat: add solutions to lc/lcof2 problems
* Add solutions to lcof2 problem: No.043.Complete Binary Tree Inserter * Add solutions to lc problem: No.2048.Next Greater Numerically Balanced Number
1 parent c1daefd commit e96084b

File tree

11 files changed

+668
-3
lines changed

11 files changed

+668
-3
lines changed

‎lcof2/剑指 Offer II 043. 往完全二叉树添加节点/README.md‎

Lines changed: 205 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,219 @@
5959
<!-- 这里可写当前语言的特殊实现逻辑 -->
6060

6161
```python
62-
62+
# Definition for a binary tree node.
63+
# class TreeNode:
64+
# def __init__(self, val=0, left=None, right=None):
65+
# self.val = val
66+
# self.left = left
67+
# self.right = right
68+
class CBTInserter:
69+
70+
def __init__(self, root: TreeNode):
71+
self.tree = []
72+
q = collections.deque([root])
73+
while q:
74+
n = len(q)
75+
for _ in range(n):
76+
node = q.popleft()
77+
self.tree.append(node)
78+
if node.left:
79+
q.append(node.left)
80+
if node.right:
81+
q.append(node.right)
82+
83+
def insert(self, val: int) -> int:
84+
pidx = (len(self.tree) - 1) >> 1
85+
node = TreeNode(val=val)
86+
self.tree.append(node)
87+
if self.tree[pidx].left is None:
88+
self.tree[pidx].left = node
89+
else:
90+
self.tree[pidx].right = node
91+
return self.tree[pidx].val
92+
93+
def get_root(self) -> TreeNode:
94+
return self.tree[0]
95+
96+
97+
# Your CBTInserter object will be instantiated and called as such:
98+
# obj = CBTInserter(root)
99+
# param_1 = obj.insert(val)
100+
# param_2 = obj.get_root()
63101
```
64102

65103
### **Java**
66104

67105
<!-- 这里可写当前语言的特殊实现逻辑 -->
68106

69107
```java
108+
/**
109+
* Definition for a binary tree node.
110+
* public class TreeNode {
111+
* int val;
112+
* TreeNode left;
113+
* TreeNode right;
114+
* TreeNode() {}
115+
* TreeNode(int val) { this.val = val; }
116+
* TreeNode(int val, TreeNode left, TreeNode right) {
117+
* this.val = val;
118+
* this.left = left;
119+
* this.right = right;
120+
* }
121+
* }
122+
*/
123+
class CBTInserter {
124+
private List<TreeNode> tree;
125+
126+
public CBTInserter(TreeNode root) {
127+
tree = new ArrayList<>();
128+
Deque<TreeNode> q = new ArrayDeque<>();
129+
q.offerLast(root);
130+
while (!q.isEmpty()) {
131+
TreeNode node = q.pollFirst();
132+
tree.add(node);
133+
if (node.left != null) {
134+
q.offerLast(node.left);
135+
}
136+
if (node.right != null) {
137+
q.offerLast(node.right);
138+
}
139+
}
140+
}
141+
142+
public int insert(int val) {
143+
int pidx = (tree.size() - 1) >> 1;
144+
TreeNode node = new TreeNode(val);
145+
tree.add(node);
146+
if (tree.get(pidx).left == null) {
147+
tree.get(pidx).left = node;
148+
} else {
149+
tree.get(pidx).right = node;
150+
}
151+
return tree.get(pidx).val;
152+
}
153+
154+
public TreeNode get_root() {
155+
return tree.get(0);
156+
}
157+
}
158+
159+
/**
160+
* Your CBTInserter object will be instantiated and called as such:
161+
* CBTInserter obj = new CBTInserter(root);
162+
* int param_1 = obj.insert(val);
163+
* TreeNode param_2 = obj.get_root();
164+
*/
165+
```
166+
167+
### **C++**
168+
169+
```cpp
170+
/**
171+
* Definition for a binary tree node.
172+
* struct TreeNode {
173+
* int val;
174+
* TreeNode *left;
175+
* TreeNode *right;
176+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
177+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
178+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
179+
* };
180+
*/
181+
class CBTInserter {
182+
public:
183+
vector<TreeNode*> tree;
184+
185+
CBTInserter(TreeNode* root) {
186+
queue<TreeNode*> q;
187+
q.push(root);
188+
while (!q.empty())
189+
{
190+
auto node = q.front();
191+
q.pop();
192+
tree.push_back(node);
193+
if (node->left) q.push(node->left);
194+
if (node->right) q.push(node->right);
195+
}
196+
}
197+
198+
int insert(int val) {
199+
int pidx = tree.size() - 1 >> 1;
200+
TreeNode* node = new TreeNode(val);
201+
tree.push_back(node);
202+
if (!tree[pidx]->left) tree[pidx]->left = node;
203+
else tree[pidx]->right = node;
204+
return tree[pidx]->val;
205+
}
206+
207+
TreeNode* get_root() {
208+
return tree[0];
209+
}
210+
};
211+
212+
/**
213+
* Your CBTInserter object will be instantiated and called as such:
214+
* CBTInserter* obj = new CBTInserter(root);
215+
* int param_1 = obj->insert(val);
216+
* TreeNode* param_2 = obj->get_root();
217+
*/
218+
```
70219
220+
### **Go**
221+
222+
```go
223+
/**
224+
* Definition for a binary tree node.
225+
* type TreeNode struct {
226+
* Val int
227+
* Left *TreeNode
228+
* Right *TreeNode
229+
* }
230+
*/
231+
type CBTInserter struct {
232+
tree []*TreeNode
233+
}
234+
235+
func Constructor(root *TreeNode) CBTInserter {
236+
var q []*TreeNode
237+
var tree []*TreeNode
238+
q = append(q, root)
239+
for len(q) > 0 {
240+
node := q[0]
241+
tree = append(tree, node)
242+
q = q[1:]
243+
if node.Left != nil {
244+
q = append(q, node.Left)
245+
}
246+
if node.Right != nil {
247+
q = append(q, node.Right)
248+
}
249+
}
250+
return CBTInserter{tree}
251+
}
252+
253+
func (this *CBTInserter) Insert(val int) int {
254+
pidx := (len(this.tree) - 1) >> 1
255+
node := &TreeNode{Val: val}
256+
this.tree = append(this.tree, node)
257+
if this.tree[pidx].Left == nil {
258+
this.tree[pidx].Left = node
259+
} else {
260+
this.tree[pidx].Right = node
261+
}
262+
return this.tree[pidx].Val
263+
}
264+
265+
func (this *CBTInserter) Get_root() *TreeNode {
266+
return this.tree[0]
267+
}
268+
269+
/**
270+
* Your CBTInserter object will be instantiated and called as such:
271+
* obj := Constructor(root);
272+
* param_1 := obj.Insert(val);
273+
* param_2 := obj.Get_root();
274+
*/
71275
```
72276

73277
### **...**
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
8+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
9+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
10+
* };
11+
*/
12+
class CBTInserter {
13+
public:
14+
vector<TreeNode*> tree;
15+
16+
CBTInserter(TreeNode* root) {
17+
queue<TreeNode*> q;
18+
q.push(root);
19+
while (!q.empty())
20+
{
21+
auto node = q.front();
22+
q.pop();
23+
tree.push_back(node);
24+
if (node->left) q.push(node->left);
25+
if (node->right) q.push(node->right);
26+
}
27+
}
28+
29+
int insert(int val) {
30+
int pidx = tree.size() - 1 >> 1;
31+
TreeNode* node = new TreeNode(val);
32+
tree.push_back(node);
33+
if (!tree[pidx]->left) tree[pidx]->left = node;
34+
else tree[pidx]->right = node;
35+
return tree[pidx]->val;
36+
}
37+
38+
TreeNode* get_root() {
39+
return tree[0];
40+
}
41+
};
42+
43+
/**
44+
* Your CBTInserter object will be instantiated and called as such:
45+
* CBTInserter* obj = new CBTInserter(root);
46+
* int param_1 = obj->insert(val);
47+
* TreeNode* param_2 = obj->get_root();
48+
*/
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* type TreeNode struct {
4+
* Val int
5+
* Left *TreeNode
6+
* Right *TreeNode
7+
* }
8+
*/
9+
type CBTInserter struct {
10+
tree []*TreeNode
11+
}
12+
13+
func Constructor(root *TreeNode) CBTInserter {
14+
var q []*TreeNode
15+
var tree []*TreeNode
16+
q = append(q, root)
17+
for len(q) > 0 {
18+
node := q[0]
19+
tree = append(tree, node)
20+
q = q[1:]
21+
if node.Left != nil {
22+
q = append(q, node.Left)
23+
}
24+
if node.Right != nil {
25+
q = append(q, node.Right)
26+
}
27+
}
28+
return CBTInserter{tree}
29+
}
30+
31+
func (this *CBTInserter) Insert(val int) int {
32+
pidx := (len(this.tree) - 1) >> 1
33+
node := &TreeNode{Val: val}
34+
this.tree = append(this.tree, node)
35+
if this.tree[pidx].Left == nil {
36+
this.tree[pidx].Left = node
37+
} else {
38+
this.tree[pidx].Right = node
39+
}
40+
return this.tree[pidx].Val
41+
}
42+
43+
func (this *CBTInserter) Get_root() *TreeNode {
44+
return this.tree[0]
45+
}
46+
47+
/**
48+
* Your CBTInserter object will be instantiated and called as such:
49+
* obj := Constructor(root);
50+
* param_1 := obj.Insert(val);
51+
* param_2 := obj.Get_root();
52+
*/
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* public class TreeNode {
4+
* int val;
5+
* TreeNode left;
6+
* TreeNode right;
7+
* TreeNode() {}
8+
* TreeNode(int val) { this.val = val; }
9+
* TreeNode(int val, TreeNode left, TreeNode right) {
10+
* this.val = val;
11+
* this.left = left;
12+
* this.right = right;
13+
* }
14+
* }
15+
*/
16+
class CBTInserter {
17+
private List<TreeNode> tree;
18+
19+
public CBTInserter(TreeNode root) {
20+
tree = new ArrayList<>();
21+
Deque<TreeNode> q = new ArrayDeque<>();
22+
q.offerLast(root);
23+
while (!q.isEmpty()) {
24+
TreeNode node = q.pollFirst();
25+
tree.add(node);
26+
if (node.left != null) {
27+
q.offerLast(node.left);
28+
}
29+
if (node.right != null) {
30+
q.offerLast(node.right);
31+
}
32+
}
33+
}
34+
35+
public int insert(int val) {
36+
int pidx = (tree.size() - 1) >> 1;
37+
TreeNode node = new TreeNode(val);
38+
tree.add(node);
39+
if (tree.get(pidx).left == null) {
40+
tree.get(pidx).left = node;
41+
} else {
42+
tree.get(pidx).right = node;
43+
}
44+
return tree.get(pidx).val;
45+
}
46+
47+
public TreeNode get_root() {
48+
return tree.get(0);
49+
}
50+
}
51+
52+
/**
53+
* Your CBTInserter object will be instantiated and called as such:
54+
* CBTInserter obj = new CBTInserter(root);
55+
* int param_1 = obj.insert(val);
56+
* TreeNode param_2 = obj.get_root();
57+
*/

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /