zoukankan      html  css  js  c++  java
  • leetcode每日一题(2020-07-03):108. 将有序数组转换为二叉搜索树

    题目描述:
    将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
    本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

    今日学习:
    1.复习树的结构

    题解:
    1.我自己想的,递归:中点设为根节点,中点左右数组的中点设为左右孩子
    2.简化版,有些地方想复杂了
    3.不用切割数组,用start和end双指针递归
    关于为什么平衡参考:https://leetcode-cn.com/problems/balance-a-binary-search-tree/solution/jiang-er-cha-sou-suo-shu-bian-ping-heng-by-leetcod/

    //我自己想的哈哈哈哈哈哈哈哈哈
    var sortedArrayToBST = function(nums) {
        //思路就是:中点设为根节点,中点左右数组的中点设为左右孩子
        if(nums.length == 0) {return null}
        if(nums.length == 1) {return new TreeNode(nums[0])}
        let mid
        if(nums.length % 2 == 0) {
            mid = ((nums.length - 1) >> 1) + 1
        }else {
            mid = (nums.length - 1) / 2
        }
        let root = new TreeNode(nums[mid])
        root.left = sortedArrayToBST(nums.slice(0, mid))
        root.right = sortedArrayToBST(nums.slice(mid + 1))
        return root
    };
    //简化版
    var sortedArrayToBST = function(nums) {
        let n = nums.length
        if(n == 0) {return null}
        let mid = Math.floor(n/2)
        let root = new TreeNode(nums[mid])
        root.left = sortedArrayToBST(nums.slice(0, mid))
        root.right = sortedArrayToBST(nums.slice(mid + 1))
        return root
    };
    //双指针递归
    const sortedArrayToBST = (nums) => {
        const buildBST = (nums, start, end) => {
            if (start > end) return null;
            const mid = (start + end) >>> 1;
            const root = new TreeNode(nums[mid]);
            root.left = buildBST(nums, start, mid - 1);
            root.right = buildBST(nums, mid + 1, end);
            return root;
        };
        return buildBST(nums, 0, nums.length - 1);
    };
    
  • 相关阅读:
    大二软件工程概论自主学习(第十一周)
    课堂练习1
    数据库的学习
    界面作业
    怎样连接连接数据库
    异常处理
    继承与多态
    String课后作业
    请查看String.equals()方法的实现代码,注意学习其实现方法。
    课后作业
  • 原文地址:https://www.cnblogs.com/autumn-starrysky/p/13228937.html
Copyright © 2011-2022 走看看