题目
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
分析
将二叉查找树进行中序遍历,就可以得到一个升序排序的数组,因此,一个已经排序的数组可以看做一个中序遍历得到的数组,要得到一个高度平衡的二叉查找树,可以使得左右子树的节点数尽可能相等。因此,可以采用二分法将数组分为两个子数组,中间值作为父节点,左边的子数组作为左子树,右边的子数组作为右子树进行递归,这样就可以得到一个高度平衡的二叉查找树。
代码
public TreeNode sortedArrayToBST(int[] num) {
return helper(0, num.length-1, num);
}
private TreeNode helper(int i, int j, int[] num) {
if(i>j)
return null;
else if(i==j){
return new TreeNode(num[i]);
}else{
int mid = (i + j + 1) /2;
TreeNode node = new TreeNode(num[mid]);
node.left = helper(i, mid-1, num);
node.right = helper(mid+1, j, num);
return node;
}
}