0
点赞
收藏
分享

微信扫一扫

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

我是芄兰 2022-04-30 阅读 63

什么是二叉搜索树?

二叉搜索树指的是根的左节点的数都小于根节点,根的右节点的数都大于根节点。根的左节点和右节点也是二叉搜索树,也需要满足这个条件。

二叉搜索树的中序遍历是升序序列

因为只有中序遍历是升序遍历,因此给定一个升序数组说明这个二叉搜索树是中序遍历排列的

中序遍历给定二叉树可能不止一种,高度平衡而又有中序遍历结果仍然不能够唯一确定一颗二叉树。

理论知识:在中序遍历序列给定的条件下,可以取中间的数组值作为根节点,比中间下标小的做根节点的左子树,比中间下标大的做根节点的右子树。(这是数组元素为奇数的情况),当元素为偶数时,可以选择中间的左边 做根节点,也可以选择中间的右边做根节点。子节点采用递归,就可以获得整个二叉树的排列。此时得到的就是高度平衡的二叉搜索树。

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

​

注意事项:不要将left写成了0,因为在右边的时候left不再是0,不要将right写成了length-1,因为再左边的时候不是length-1.再new 一个实例的时候可以将某个数组值传进去。定义int nums[],传递实参的时候传递的数组名。获取传进来的数组长度,再Java中直接调用数组名.length 就可以。

举报

相关推荐

0 条评论