Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
題意:給定一個升序的數組,把這個數組轉變成一個高度平衡的二叉搜索樹。
思路:
題目要求高度平衡,所以需要我們把數組的中點位置當做根節點。
由于二叉搜索樹的中序遍歷結果就是升序,且左子樹所有點的值小于根節點,因此中點位置左邊是構成左子樹的區間,右邊是構成右子樹的區間,求左右子樹的過程遞歸執行就可以了。
public TreeNode sortedArrayToBST(int[] nums) {
if (nums == null || nums.length == 0) {
return null;
}
return helper(0, nums.length - 1, nums);
}
public TreeNode helper(int start, int end, int[] nums) {
if (start > end) {
return null;
}
int middle = start + (end - start) / 2;
TreeNode root = new TreeNode(nums[middle]);
root.left = helper(start, middle - 1, nums);
root.right = helper(middle + 1, end, nums);
return root;
}