zoukankan      html  css  js  c++  java
  • 面试题 04.02. 最小高度树

    地址  https://leetcode-cn.com/problems/minimum-height-tree-lcci/

    给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。
    
    示例:
    给定有序数组: [-10,-3,0,5,9],
    
    一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
    
              0 
             /  
           -3   9 
           /   / 
         -10  5 

    解答

    由于数组是递增有序数组
    要求高度尽量小,等同于左右子树高度相同
    那么去中间的点为根节点(左右节点数相差最多为1)
    左边部分再生成一个高度尽量小的子树
    右边部分再生成一个高度尽量小的子树
    即可
    过程处理类似,数据规模逐步缩小
    考虑使用递归解决

     

    class Solution {
    public:
        TreeNode* dfs(const vector<int>& nums, int l, int r) {
            if (l > r) return NULL;
            int mid = l + r >> 1;
            TreeNode* root = new TreeNode(nums[mid]);
            root->left = dfs(nums, l, mid-1);
            root->right = dfs(nums, mid + 1, r);
            return root;
        }
    
        TreeNode* sortedArrayToBST(vector<int>& nums) {
            TreeNode* root = dfs(nums,0, nums.size()-1);
            return root;
        }
    };
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    AtCoder Grand Contest 033
    Luogu P6620 [省选联考 2020 A 卷] 组合数问题
    Luogu P6631 [ZJOI2020] 序列
    Luogu P6630 [ZJOI2020] 传统艺能
    Luogu P6633 [ZJOI2020] 抽卡
    Luogu P6623 [省选联考 2020 A 卷] 树
    AtCoder Grand Contest 034
    Luogu P5445 [APIO2019] 路灯
    LOJ #6059. 「2017 山东一轮集训 Day1」Sum
    Luogu P3721 [AH2017/HNOI2017]单旋
  • 原文地址:https://www.cnblogs.com/itdef/p/14489702.html
Copyright © 2011-2022 走看看