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 f5a316a

Browse files
committed
feat: add solutions to lc/lcof2 problems
* lc No.0919 & lcof2 No.043.Complete Binary Tree Inserter
1 parent 4fe765d commit f5a316a

File tree

13 files changed

+423
-187
lines changed

13 files changed

+423
-187
lines changed

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

Lines changed: 107 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -65,37 +65,36 @@
6565
# self.left = left
6666
# self.right = right
6767
class CBTInserter:
68-
6968
def __init__(self, root: TreeNode):
7069
self.tree = []
7170
q = deque([root])
7271
while q:
73-
n = len(q)
74-
for _ in range(n):
72+
for _ in range(len(q)):
7573
node = q.popleft()
7674
self.tree.append(node)
7775
if node.left:
7876
q.append(node.left)
7977
if node.right:
8078
q.append(node.right)
8179

82-
def insert(self, val: int) -> int:
83-
pidx = (len(self.tree) - 1) >> 1
84-
node = TreeNode(val=val)
80+
def insert(self, v: int) -> int:
81+
pid = (len(self.tree) - 1) >> 1
82+
node = TreeNode(v)
8583
self.tree.append(node)
86-
if self.tree[pidx].left is None:
87-
self.tree[pidx].left = node
84+
p = self.tree[pid]
85+
if p.left is None:
86+
p.left = node
8887
else:
89-
self.tree[pidx].right = node
90-
return self.tree[pidx].val
88+
p.right = node
89+
return p.val
9190

9291
def get_root(self) -> TreeNode:
9392
return self.tree[0]
9493

9594

9695
# Your CBTInserter object will be instantiated and called as such:
9796
# obj = CBTInserter(root)
98-
# param_1 = obj.insert(val)
97+
# param_1 = obj.insert(v)
9998
# param_2 = obj.get_root()
10099
```
101100

@@ -125,31 +124,32 @@ class CBTInserter {
125124
public CBTInserter(TreeNode root) {
126125
tree = new ArrayList<>();
127126
Deque<TreeNode> q = new ArrayDeque<>();
128-
q.offerLast(root);
127+
q.offer(root);
129128
while (!q.isEmpty()) {
130129
TreeNode node = q.pollFirst();
131130
tree.add(node);
132131
if (node.left != null) {
133-
q.offerLast(node.left);
132+
q.offer(node.left);
134133
}
135134
if (node.right != null) {
136-
q.offerLast(node.right);
135+
q.offer(node.right);
137136
}
138137
}
139138
}
140-
141-
public int insert(int val) {
142-
int pidx = (tree.size() - 1) >> 1;
143-
TreeNode node = new TreeNode(val);
139+
140+
public int insert(int v) {
141+
int pid = (tree.size() - 1) >> 1;
142+
TreeNode node = new TreeNode(v);
144143
tree.add(node);
145-
if (tree.get(pidx).left == null) {
146-
tree.get(pidx).left = node;
144+
TreeNode p = tree.get(pid);
145+
if (p.left == null) {
146+
p.left = node;
147147
} else {
148-
tree.get(pidx).right = node;
148+
p.right = node;
149149
}
150-
return tree.get(pidx).val;
150+
return p.val;
151151
}
152-
152+
153153
public TreeNode get_root() {
154154
return tree.get(0);
155155
}
@@ -158,7 +158,7 @@ class CBTInserter {
158158
/**
159159
* Your CBTInserter object will be instantiated and called as such:
160160
* CBTInserter obj = new CBTInserter(root);
161-
* int param_1 = obj.insert(val);
161+
* int param_1 = obj.insert(v);
162162
* TreeNode param_2 = obj.get_root();
163163
*/
164164
```
@@ -182,8 +182,7 @@ public:
182182
vector<TreeNode*> tree;
183183

184184
CBTInserter(TreeNode* root) {
185-
queue<TreeNode*> q;
186-
q.push(root);
185+
queue<TreeNode*> q{{root}};
187186
while (!q.empty())
188187
{
189188
auto node = q.front();
@@ -193,16 +192,17 @@ public:
193192
if (node->right) q.push(node->right);
194193
}
195194
}
196-
197-
int insert(int val) {
198-
int pidx = tree.size() - 1 >> 1;
199-
TreeNode* node = new TreeNode(val);
195+
196+
int insert(int v) {
197+
int pid = tree.size() - 1 >> 1;
198+
TreeNode* node = new TreeNode(v);
200199
tree.push_back(node);
201-
if (!tree[pidx]->left) tree[pidx]->left = node;
202-
else tree[pidx]->right = node;
203-
return tree[pidx]->val;
200+
TreeNode* p = tree[pid];
201+
if (!p->left) p->left = node;
202+
else p->right = node;
203+
return p->val;
204204
}
205-
205+
206206
TreeNode* get_root() {
207207
return tree[0];
208208
}
@@ -211,7 +211,7 @@ public:
211211
/**
212212
* Your CBTInserter object will be instantiated and called as such:
213213
* CBTInserter* obj = new CBTInserter(root);
214-
* int param_1 = obj->insert(val);
214+
* int param_1 = obj->insert(v);
215215
* TreeNode* param_2 = obj->get_root();
216216
*/
217217
```
@@ -232,9 +232,8 @@ type CBTInserter struct {
232232
}
233233
234234
func Constructor(root *TreeNode) CBTInserter {
235-
var q []*TreeNode
236-
var tree []*TreeNode
237-
q = append(q, root)
235+
q := []*TreeNode{root}
236+
tree := []*TreeNode{}
238237
for len(q) > 0 {
239238
node := q[0]
240239
tree = append(tree, node)
@@ -249,16 +248,17 @@ func Constructor(root *TreeNode) CBTInserter {
249248
return CBTInserter{tree}
250249
}
251250
252-
func (this *CBTInserter) Insert(val int) int {
253-
pidx := (len(this.tree) - 1) >> 1
254-
node := &TreeNode{Val: val}
251+
func (this *CBTInserter) Insert(v int) int {
252+
pid := (len(this.tree) - 1) >> 1
253+
node := &TreeNode{Val: v}
255254
this.tree = append(this.tree, node)
256-
if this.tree[pidx].Left == nil {
257-
this.tree[pidx].Left = node
255+
p := this.tree[pid]
256+
if p.Left == nil {
257+
p.Left = node
258258
} else {
259-
this.tree[pidx].Right = node
259+
p.Right = node
260260
}
261-
return this.tree[pidx].Val
261+
return p.Val
262262
}
263263
264264
func (this *CBTInserter) Get_root() *TreeNode {
@@ -268,11 +268,72 @@ func (this *CBTInserter) Get_root() *TreeNode {
268268
/**
269269
* Your CBTInserter object will be instantiated and called as such:
270270
* obj := Constructor(root);
271-
* param_1 := obj.Insert(val);
271+
* param_1 := obj.Insert(v);
272272
* param_2 := obj.Get_root();
273273
*/
274274
```
275275

276+
### **JavaScript**
277+
278+
```js
279+
/**
280+
* Definition for a binary tree node.
281+
* function TreeNode(val, left, right) {
282+
* this.val = (val===undefined ? 0 : val)
283+
* this.left = (left===undefined ? null : left)
284+
* this.right = (right===undefined ? null : right)
285+
* }
286+
*/
287+
/**
288+
* @param {TreeNode} root
289+
*/
290+
var CBTInserter = function (root) {
291+
this.tree = [];
292+
const q = [root];
293+
while (q.length) {
294+
const node = q.shift();
295+
this.tree.push(node);
296+
if (node.left) {
297+
q.push(node.left);
298+
}
299+
if (node.right) {
300+
q.push(node.right);
301+
}
302+
}
303+
};
304+
305+
/**
306+
* @param {number} v
307+
* @return {number}
308+
*/
309+
CBTInserter.prototype.insert = function (v) {
310+
const pid = (this.tree.length - 1) >> 1;
311+
const node = new TreeNode(v);
312+
this.tree.push(node);
313+
const p = this.tree[pid];
314+
if (!p.left) {
315+
p.left = node;
316+
} else {
317+
p.right = node;
318+
}
319+
return p.val;
320+
};
321+
322+
/**
323+
* @return {TreeNode}
324+
*/
325+
CBTInserter.prototype.get_root = function () {
326+
return this.tree[0];
327+
};
328+
329+
/**
330+
* Your CBTInserter object will be instantiated and called as such:
331+
* var obj = new CBTInserter(root)
332+
* var param_1 = obj.insert(v)
333+
* var param_2 = obj.get_root()
334+
*/
335+
```
336+
276337
### **...**
277338

278339
```

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ class CBTInserter {
1414
vector<TreeNode*> tree;
1515

1616
CBTInserter(TreeNode* root) {
17-
queue<TreeNode*> q;
18-
q.push(root);
17+
queue<TreeNode*> q{{root}};
1918
while (!q.empty())
2019
{
2120
auto node = q.front();
@@ -26,13 +25,14 @@ class CBTInserter {
2625
}
2726
}
2827

29-
int insert(int val) {
30-
int pidx = tree.size() - 1 >> 1;
31-
TreeNode* node = new TreeNode(val);
28+
int insert(int v) {
29+
int pid = tree.size() - 1 >> 1;
30+
TreeNode* node = new TreeNode(v);
3231
tree.push_back(node);
33-
if (!tree[pidx]->left) tree[pidx]->left = node;
34-
else tree[pidx]->right = node;
35-
return tree[pidx]->val;
32+
TreeNode* p = tree[pid];
33+
if (!p->left) p->left = node;
34+
else p->right = node;
35+
return p->val;
3636
}
3737

3838
TreeNode* get_root() {
@@ -43,6 +43,6 @@ class CBTInserter {
4343
/**
4444
* Your CBTInserter object will be instantiated and called as such:
4545
* CBTInserter* obj = new CBTInserter(root);
46-
* int param_1 = obj->insert(val);
46+
* int param_1 = obj->insert(v);
4747
* TreeNode* param_2 = obj->get_root();
4848
*/

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

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@ type CBTInserter struct {
1111
}
1212

1313
func Constructor(root *TreeNode) CBTInserter {
14-
var q []*TreeNode
15-
var tree []*TreeNode
16-
q = append(q, root)
14+
q := []*TreeNode{root}
15+
tree := []*TreeNode{}
1716
for len(q) > 0 {
1817
node := q[0]
1918
tree = append(tree, node)
@@ -28,16 +27,17 @@ func Constructor(root *TreeNode) CBTInserter {
2827
return CBTInserter{tree}
2928
}
3029

31-
func (this *CBTInserter) Insert(val int) int {
32-
pidx := (len(this.tree) - 1) >> 1
33-
node := &TreeNode{Val: val}
30+
func (this *CBTInserter) Insert(v int) int {
31+
pid := (len(this.tree) - 1) >> 1
32+
node := &TreeNode{Val: v}
3433
this.tree = append(this.tree, node)
35-
if this.tree[pidx].Left == nil {
36-
this.tree[pidx].Left = node
34+
p := this.tree[pid]
35+
if p.Left == nil {
36+
p.Left = node
3737
} else {
38-
this.tree[pidx].Right = node
38+
p.Right = node
3939
}
40-
return this.tree[pidx].Val
40+
return p.Val
4141
}
4242

4343
func (this *CBTInserter) Get_root() *TreeNode {
@@ -47,6 +47,6 @@ func (this *CBTInserter) Get_root() *TreeNode {
4747
/**
4848
* Your CBTInserter object will be instantiated and called as such:
4949
* obj := Constructor(root);
50-
* param_1 := obj.Insert(val);
50+
* param_1 := obj.Insert(v);
5151
* param_2 := obj.Get_root();
5252
*/

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

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,29 +19,30 @@ class CBTInserter {
1919
public CBTInserter(TreeNode root) {
2020
tree = new ArrayList<>();
2121
Deque<TreeNode> q = new ArrayDeque<>();
22-
q.offerLast(root);
22+
q.offer(root);
2323
while (!q.isEmpty()) {
2424
TreeNode node = q.pollFirst();
2525
tree.add(node);
2626
if (node.left != null) {
27-
q.offerLast(node.left);
27+
q.offer(node.left);
2828
}
2929
if (node.right != null) {
30-
q.offerLast(node.right);
30+
q.offer(node.right);
3131
}
3232
}
3333
}
3434

35-
public int insert(int val) {
36-
int pidx = (tree.size() - 1) >> 1;
37-
TreeNode node = new TreeNode(val);
35+
public int insert(int v) {
36+
int pid = (tree.size() - 1) >> 1;
37+
TreeNode node = new TreeNode(v);
3838
tree.add(node);
39-
if (tree.get(pidx).left == null) {
40-
tree.get(pidx).left = node;
39+
TreeNode p = tree.get(pid);
40+
if (p.left == null) {
41+
p.left = node;
4142
} else {
42-
tree.get(pidx).right = node;
43+
p.right = node;
4344
}
44-
return tree.get(pidx).val;
45+
return p.val;
4546
}
4647

4748
public TreeNode get_root() {
@@ -52,6 +53,6 @@ public TreeNode get_root() {
5253
/**
5354
* Your CBTInserter object will be instantiated and called as such:
5455
* CBTInserter obj = new CBTInserter(root);
55-
* int param_1 = obj.insert(val);
56+
* int param_1 = obj.insert(v);
5657
* TreeNode param_2 = obj.get_root();
5758
*/

0 commit comments

Comments
(0)

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