题目
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
思路
二叉搜索树中序遍历就是升序数组。又因为是平衡树,所以以中间元素作为根节点
代码
public class TreeNode {
int val
;
TreeNode left
;
TreeNode right
;
TreeNode(int x
) { val
= x
; }
}
public TreeNode
sortedArrayToBST(int[] nums
) {
return dfs(nums
,0,nums
.length
-1);
}
public TreeNode
dfs(int []nums
,int left
,int right
){
if(left
>right
) return null
;
int mid
= left
+(right
-left
)/2;
TreeNode root
= new TreeNode(nums
[mid
]);
root
.left
= dfs(nums
,left
,mid
-1);
root
.right
= dfs(nums
,mid
+1,right
);
return root
;
}