@@ -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.