23_108. 将有序数组转化为二叉搜索树


题目描述:

解题思路:

二叉搜索树,其中序遍历是一个有序数组,但是如果只是利用中序遍历,并不能保证高度平衡。其实提到高度平衡,就可以想着使用递归的方法来解决。

高度平衡的二叉搜索树,在每一个节点都是高度平衡的,根据定义知道高度平衡的二叉树,左右子树的高度相差小于等于1,如果对于每个节点都选择有序数组中间的值,就可以使得左右子树的高度相差小于等于1。

递归代码
class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        return helper(nums, 0, nums.length - 1);
    }
    public TreeNode helper(int[] nums, int l, int r) {
        if (l > r) {
            return null;
        }
        int mid = (l + r) / 2;
        TreeNode root = new TreeNode(nums[mid]);
        root.left = helper(nums, l, mid - 1);
        root.right = helper(nums, mid + 1, r);
        return root;
    }
}