解题记录 LeetCode 升序数组转化为二叉搜索树

升序数组转化为二叉搜索树

二叉搜索树的中序遍历是升序序列,题目给定的数组是按照升序排序的有序数组,因此可以确保数组是二叉搜索树的中序遍历序列。

给定二叉搜索树的中序遍历,是否可以唯一地确定二叉搜索树?答案是否定的。

如果增加一个限制条件,即要求二叉搜索树的高度平衡,是否可以唯一地确定二叉搜索树?答案仍然是否定的。

我们可以选择中间数字作为二叉搜索树的根节点,这样分给左右子树的数字个数相同或只相差 11,可以使得树保持平衡。如果数组长度是奇数,则根节点的选择是唯一的,如果数组长度是偶数,则可以选择中间位置左边的数字作为根节点

然后剩下的就是递归了

class Solution {
    
    
    public TreeNode sortedArrayToBST(int[] nums) {
    
    
        return getTree(nums, 0, nums.length - 1);
    }

    public TreeNode getTree(int[] nums, int left, int right) {
    
    
        if (left > right) {
    
    
            return null;
        }

        // 总是选择中间位置左边的数字作为根节点
        int mid = (left + right) / 2;

        TreeNode root = new TreeNode(nums[mid]);
        root.left = getTree(nums, left, mid - 1);
        root.right = getTree(nums, mid + 1, right);
        return root;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_45560445/article/details/116705132
今日推荐