65
65
# self.left = left
66
66
# self.right = right
67
67
class CBTInserter :
68
-
69
68
def __init__ (self , root : TreeNode):
70
69
self .tree = []
71
70
q = deque([root])
72
71
while q:
73
- n = len (q)
74
- for _ in range (n):
72
+ for _ in range (len (q)):
75
73
node = q.popleft()
76
74
self .tree.append(node)
77
75
if node.left:
78
76
q.append(node.left)
79
77
if node.right:
80
78
q.append(node.right)
81
79
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 )
85
83
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
88
87
else :
89
- self .tree[pidx] .right = node
90
- return self .tree[pidx] .val
88
+ p .right = node
89
+ return p .val
91
90
92
91
def get_root (self ) -> TreeNode:
93
92
return self .tree[0 ]
94
93
95
94
96
95
# Your CBTInserter object will be instantiated and called as such:
97
96
# obj = CBTInserter(root)
98
- # param_1 = obj.insert(val )
97
+ # param_1 = obj.insert(v )
99
98
# param_2 = obj.get_root()
100
99
```
101
100
@@ -125,31 +124,32 @@ class CBTInserter {
125
124
public CBTInserter (TreeNode root ) {
126
125
tree = new ArrayList<> ();
127
126
Deque<TreeNode > q = new ArrayDeque<> ();
128
- q. offerLast (root);
127
+ q. offer (root);
129
128
while (! q. isEmpty()) {
130
129
TreeNode node = q. pollFirst();
131
130
tree. add(node);
132
131
if (node. left != null ) {
133
- q. offerLast (node. left);
132
+ q. offer (node. left);
134
133
}
135
134
if (node. right != null ) {
136
- q. offerLast (node. right);
135
+ q. offer (node. right);
137
136
}
138
137
}
139
138
}
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 );
144
143
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;
147
147
} else {
148
- tree . get(pidx) . right = node;
148
+ p . right = node;
149
149
}
150
- return tree . get(pidx) . val;
150
+ return p . val;
151
151
}
152
-
152
+
153
153
public TreeNode get_root () {
154
154
return tree. get(0 );
155
155
}
@@ -158,7 +158,7 @@ class CBTInserter {
158
158
/**
159
159
* Your CBTInserter object will be instantiated and called as such:
160
160
* CBTInserter obj = new CBTInserter(root);
161
- * int param_1 = obj.insert(val );
161
+ * int param_1 = obj.insert(v );
162
162
* TreeNode param_2 = obj.get_root();
163
163
*/
164
164
```
@@ -182,8 +182,7 @@ public:
182
182
vector<TreeNode* > tree;
183
183
184
184
CBTInserter(TreeNode* root) {
185
- queue<TreeNode*> q;
186
- q.push(root);
185
+ queue<TreeNode*> q{{root}};
187
186
while (!q.empty())
188
187
{
189
188
auto node = q.front();
@@ -193,16 +192,17 @@ public:
193
192
if (node->right) q.push(node->right);
194
193
}
195
194
}
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 );
200
199
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;
204
204
}
205
-
205
+
206
206
TreeNode* get_root() {
207
207
return tree[ 0] ;
208
208
}
@@ -211,7 +211,7 @@ public:
211
211
/**
212
212
* Your CBTInserter object will be instantiated and called as such:
213
213
* CBTInserter* obj = new CBTInserter(root);
214
- * int param_1 = obj->insert(val );
214
+ * int param_1 = obj->insert(v );
215
215
* TreeNode* param_2 = obj->get_root();
216
216
* /
217
217
```
@@ -232,9 +232,8 @@ type CBTInserter struct {
232
232
}
233
233
234
234
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{}
238
237
for len(q) > 0 {
239
238
node := q[0]
240
239
tree = append(tree, node)
@@ -249,16 +248,17 @@ func Constructor(root *TreeNode) CBTInserter {
249
248
return CBTInserter{tree}
250
249
}
251
250
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 }
255
254
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
258
258
} else {
259
- this.tree[pidx] .Right = node
259
+ p .Right = node
260
260
}
261
- return this.tree[pidx] .Val
261
+ return p .Val
262
262
}
263
263
264
264
func (this *CBTInserter) Get_root() *TreeNode {
@@ -268,11 +268,72 @@ func (this *CBTInserter) Get_root() *TreeNode {
268
268
/**
269
269
* Your CBTInserter object will be instantiated and called as such:
270
270
* obj := Constructor(root);
271
- * param_1 := obj.Insert(val );
271
+ * param_1 := obj.Insert(v );
272
272
* param_2 := obj.Get_root();
273
273
*/
274
274
```
275
275
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
+
276
337
### ** ...**
277
338
278
339
```
0 commit comments