• [leetCode]108.将有序数组转化为二叉搜索树


    在这里插入图片描述

    解法中序遍历-递归

    选择不同的中间位置可以产生不同的高度平衡二叉搜索树

    • lo +(hi - lo)/2 或 (lo + hi)/2 选择中间位置左边数字作为根节点
      在这里插入图片描述
    • lo+(hi - lo)/2 + 1 或 (lo + hi +1)/2 选择中间位置右边数字作为根节点
      在这里插入图片描述
    • lo+(hi - lo)/2 + rand.nextInt(2) 或 (lo + hi +rand.nextInt(2))/2 选择中间位置任意数字作为根节点
    • 在这里插入图片描述
    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public TreeNode sortedArrayToBST(int[] nums) {
            int mid =nums.length/2;
            if(nums.length == 0)return null;
            TreeNode root = new TreeNode(nums[mid]);
            root.left = sortedArrayToBST(Arrays.copyOfRange(nums,0, mid));
            root.right = sortedArrayToBST(Arrays.copyOfRange(nums,mid+1, nums.length));
            return root;
        }
    }
    

    上面的递归用了Arrays.copyOfRange所以要慢,下面递归使用两个指针所以要快

    class Solution {
        public TreeNode sortedArrayToBST(int[] nums) {
            return dfs(nums, 0, nums.length-1);
        }
    
        public TreeNode dfs(int[] nums, int lo, int hi){
            if(hi<lo) return null;
            int mid = lo + (hi - lo)/2;
            TreeNode root = new TreeNode(nums[mid]);
            root.left = dfs(nums, lo, mid-1);
            root.right = dfs(nums, mid+1, hi);
            return root;
        }
    }
    
  • 相关阅读:
    maven学习(二)
    maven学习(一)
    一步步点亮led之软硬件分析
    mkv210添加校验和
    led部分Makefile
    makefile
    交叉编译工具链
    基础知识
    C语言复杂表达式与指针应用
    指针
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13860012.html
Copyright © 2020-2023  润新知