题目描述
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例:
给定有序数组: [-10,-3,0,5,9],
一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
0
/ \
-3 9 / / -10 5
构建二叉树
class Solution {
public TreeNode
sortedArrayToBST(int[] nums
) {
return inBST(nums
,0,nums
.length
-1);
}
public TreeNode
inBST(int[] nums
,int left
, int right
){
if(left
>right
) return null
;
int mid
= left
+ (right
- left
+1)/2;
TreeNode leftTree
= inBST(nums
,left
, mid
- 1);
TreeNode root
= new TreeNode(nums
[mid
]);
root
.left
= leftTree
;
root
.right
= inBST(nums
,mid
+1,right
);
return root
;
}
public TreeNode
preBST(int[] nums
,int left
, int right
){
if(left
>right
) return null
;
int mid
= left
+ (right
- left
+1)/2;
TreeNode root
= new TreeNode(nums
[mid
]);
root
.left
= preBST(nums
,left
, mid
- 1);
root
.right
= preBST(nums
,mid
+1,right
);
return root
;
}
}