将有序数组转换为二叉搜索树

将有序数组转换为二叉搜索树_第1张图片

将有序数组转换为二叉搜索树_第2张图片

做这一题的前提是要搞懂一些概念,比如什么是高度平衡的二叉树?什么又是搜索树?

 二叉搜索树(Binary Search Tree)

它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根节点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。二叉搜索树作为一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有数组快速查找的优势;所以应用十分广泛,例如在文件系统和数据库系统一般会采用这种数据结构进行高效率的排序与检索操作。

 高度平衡 二叉树

它是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。

 先上菜,开袋即食

class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        return build(nums,0,nums.length-1);
    }
    public TreeNode build(int[] nums,int left,int right){
        if(left>right) return null;
        int mid = (left+right)/2;//选取中间节点为根节点(或节点)
        TreeNode root = new TreeNode(nums[mid]);
        root.left = build(nums,left,mid-1);//左右一分为2,节点的左右子树高度不超过1
        root.right = build(nums,mid+1,right);
        return root;
    }
}

我们可以选择中间数字作为二叉搜索树的根节点,这样分给左右子树的数字个数相同或只相差 1,可以使得树保持平衡。又因为nums中的元素已经是升序了,所以中间节点左边永远小于右边,确保了二叉搜索树的性质。

你可能感兴趣的:(LeetCode,数据结构,力扣,算法,java)