@@ -209,6 +209,8 @@ public:
209
209
210
210
211
211
Java:
212
+
213
+ 递归: 左闭右开 [ left,right)
212
214
``` Java
213
215
class Solution {
214
216
public TreeNode sortedArrayToBST (int [] nums ) {
@@ -232,6 +234,75 @@ class Solution {
232
234
233
235
```
234
236
237
+ 递归: 左闭右闭 [ left,right]
238
+ ``` java
239
+ class Solution {
240
+ public TreeNode sortedArrayToBST (int [] nums ) {
241
+ TreeNode root = traversal(nums, 0 , nums. length - 1 );
242
+ return root;
243
+ }
244
+
245
+ // 左闭右闭区间[left, right)
246
+ private TreeNode traversal (int [] nums , int left , int right ) {
247
+ if (left > right) return null ;
248
+
249
+ int mid = left + ((right - left) >> 1 );
250
+ TreeNode root = new TreeNode (nums[mid]);
251
+ root. left = traversal(nums, left, mid - 1 );
252
+ root. right = traversal(nums, mid + 1 , right);
253
+ return root;
254
+ }
255
+ }
256
+ ```
257
+ 迭代: 左闭右闭 [ left,right]
258
+ ``` java
259
+ class Solution {
260
+ public TreeNode sortedArrayToBST (int [] nums ) {
261
+ if (nums. length == 0 ) return null ;
262
+
263
+ // 根节点初始化
264
+ TreeNode root = new TreeNode (- 1 );
265
+ Queue<TreeNode > nodeQueue = new LinkedList<> ();
266
+ Queue<Integer > leftQueue = new LinkedList<> ();
267
+ Queue<Integer > rightQueue = new LinkedList<> ();
268
+
269
+ // 根节点入队列
270
+ nodeQueue. offer(root);
271
+ // 0为左区间下表初始位置
272
+ leftQueue. offer(0 );
273
+ // nums.size() - 1为右区间下表初始位置
274
+ rightQueue. offer(nums. length - 1 );
275
+
276
+ while (! nodeQueue. isEmpty()) {
277
+ TreeNode currNode = nodeQueue. poll();
278
+ int left = leftQueue. poll();
279
+ int right = rightQueue. poll();
280
+ int mid = left + ((right - left) >> 1 );
281
+
282
+ // 将mid对应的元素给中间节点
283
+ currNode. val = nums[mid];
284
+
285
+ // 处理左区间
286
+ if (left <= mid - 1 ) {
287
+ currNode. left = new TreeNode (- 1 );
288
+ nodeQueue. offer(currNode. left);
289
+ leftQueue. offer(left);
290
+ rightQueue. offer(mid - 1 );
291
+ }
292
+
293
+ // 处理右区间
294
+ if (right >= mid + 1 ) {
295
+ currNode. right = new TreeNode (- 1 );
296
+ nodeQueue. offer(currNode. right);
297
+ leftQueue. offer(mid + 1 );
298
+ rightQueue. offer(right);
299
+ }
300
+ }
301
+ return root;
302
+ }
303
+ }
304
+ ```
305
+
235
306
Python:
236
307
``` python3
237
308
# Definition for a binary tree node.
@@ -279,6 +350,36 @@ func sortedArrayToBST(nums []int) *TreeNode {
279
350
}
280
351
```
281
352
353
+ JavaScript版本
354
+
355
+ ```javascript
356
+ /**
357
+ * Definition for a binary tree node.
358
+ * function TreeNode(val, left, right) {
359
+ * this.val = (val===undefined ? 0 : val)
360
+ * this.left = (left===undefined ? null : left)
361
+ * this.right = (right===undefined ? null : right)
362
+ * }
363
+ */
364
+ /**
365
+ * @param {number[]} nums
366
+ * @return {TreeNode}
367
+ */
368
+ var sortedArrayToBST = function (nums) {
369
+ const buildTree = (Arr, left, right) => {
370
+ if (left > right)
371
+ return null;
372
+
373
+ let mid = Math.floor(left + (right - left) / 2);
374
+
375
+ let root = new TreeNode(Arr[mid]);
376
+ root.left = buildTree(Arr, left, mid - 1);
377
+ root.right = buildTree(Arr, mid + 1, right);
378
+ return root;
379
+ }
380
+ return buildTree(nums, 0, nums.length - 1);
381
+ };
382
+ ```
282
383
283
384
284
385
0 commit comments