zoukankan      html  css  js  c++  java
  • 【程序员面试金典】面试题 04.02. 最小高度树

    题目

    给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。

    示例:

    给定有序数组: [-10,-3,0,5,9],
    
    一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
    
              0 
             /  
           -3   9 
           /   / 
         -10  5 
    

    思路

    先对数组进行排序,然后选择中间元素作为根节点,再对根节点左右进行递归。

    代码

    时间复杂度:O(nlogn),即为排序时间复杂度
    空间复杂度:O(1)

    class Solution {
    public:
        TreeNode* sortedArrayToBST(vector<int>& nums) {
            int size = nums.size();
            if (size == 0) return nullptr;
            sort(nums.begin(), nums.end());
            return helper(nums, 0, size - 1);
        }
    
        TreeNode* helper(vector<int> &nums, int s, int e) {
            if (s > e) return nullptr;
            int mid = s + (e - s) / 2;
            TreeNode *root = new TreeNode(nums[mid]);
            root->left = helper(nums, s, mid - 1);
            root->right = helper(nums, mid + 1, e);
            return root;
        }
    };
    
  • 相关阅读:
    promise异步获取数据
    解决浏览器保存密码自动填充问题
    函数柯里化
    JS高级函数的用法
    Object.assign替代写法
    tree-shaking
    假如参数是对象或者函数,如何处理
    宏任务与微任务 event-loop
    Linux常用命令大全
    Image Processing
  • 原文地址:https://www.cnblogs.com/galaxy-hao/p/13174132.html
Copyright © 2011-2022 走看看