二叉树算法题

17 阅读1分钟

有序数组转为二叉搜索树

有序数组转为二叉搜索树 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 **高度平衡 **二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。

示例 1: 输入:nums = [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:

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

    private TreeNode toTree(int[] nums, int l, int r) {
        if(l>r) return null;
        int m=l+((r-l)>>1);
        int val=nums[m];
        TreeNode root=new TreeNode(val);
        TreeNode left=toTree(nums,l,m-1);
        TreeNode right=toTree(nums,m+1,r);
        root.left=left;
        root.right=right;
        return root;

    }
}

寻找两个正序数组的中位数

寻找两个正序数组的中位数


class Solution {
    public static void main(String[] args) {
        int[] nums1=new int[]{1,3};
        int[] nums2=new int[]{2};
        findMedianSortedArrays(nums1,nums2);
    }
    public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int len1 = nums1.length;
        int len2 = nums2.length;
        int len=(len1+len2)/2+1;
        if(len==1){
            if(nums1.length==1){
                return nums1[0];
            }else {
                return nums2[0];
            }
        }
        int[] nums=new int[len];
        int index1=0;
        int index2=0;
        for (int i = 0; i < nums.length; i++) {
            if(index1<len1&&index2<len2&&nums1[index1]<nums2[index2]){
                nums[i]=nums1[index1++];
            }else if(index1<len1&&index2<len2&&nums1[index1]>=nums2[index2]){
                nums[i]=nums2[index2++];
            }else if(index1==len1){
                nums[i]=nums2[index2++];
            }else if(index2==len2){
                nums[i]=nums1[index1++];
            }
        }

        double x=nums[len-1];
        double y=nums[len-2];

        return (len1+len2)%2==0?(x+y)/2:x;


    }
}