将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
给定有序数组: [-10,-3,0,5,9],
一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
0
/ \
-3 9
/ /
-10 5
二叉搜索树 左子树小于根小于右子树 因此对于一个升序排列的有序数组 他其实是 二叉树的中序遍历
众所周知,单独的中序遍历不能确定一颗二叉树,所以 本题的答案是不唯一的
由于要求平衡,可以始终让中间节点作为根节点 这样左右子树的数量总是相同的。如此递归即可
class Solution {
int[] nums;
public TreeNode sortedArrayToBST(int[] nums) {
this.nums=nums;
return buildNode(0,nums.length-1);
}
public TreeNode buildNode(int low,int heigh){
if(low>heigh){
return null;
}
int mid= (low+heigh)/2;
TreeNode root = new TreeNode(nums[mid]);
root.left=buildNode(low,mid-1);
root.right=buildNode(mid+1,heigh);
return root;
}
}