Solution1:我的答案。

显示是投机取巧啊

class MinimalBST {
public:int buildMinimalBST(vector<int> vals) {// write code heredouble a = vals.size();int res = log(a)/log(2.0);return res + 1;}
};

注意:C语言中带了计算对数的函数log(),底数是e。若计算其他底数的对数,则利用公式logab=lnblnalog_{a}^b=\frac{ln_b}{ln_a}logab​=lna​lnb​​转化一下就好了~

Solution2:

参考网址:https://www.nowcoder.com/profile/3886832/codeBookDetail?submissionId=15623587
思路:取有序数组中间数值作为二叉搜索树的根,这样高度最小。确定根之后,递归依次确定根的左子树的根,右子树的根。。。
【重点学习基于数组递归构建二叉树】

//思路:取有序数组中间数值作为二叉搜索树的根,这样高度最小。确定根之后,递归依次确定根的左子树的根,右子树的根。。。
/*struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int data) :val(data),left(NULL),right(NULL) {}
};*/
class MinimalBST {
public:TreeNode *buildBST(vector<int> vals,int left,int right) {if (left > right)return NULL;int middle = left + (right - left)/2;TreeNode *root = new TreeNode(vals[middle]);root->left = buildBST(vals,left,middle-1);root->right = buildBST(vals,middle+1,right);return root;}int highBST(TreeNode *root) {if (root == NULL)return 0;int left = highBST(root->left);int right = highBST(root->right);if (left > right)return left + 1;elsereturn right + 1;}int buildMinimalBST(vector<int> vals) {// write code hereint length = vals.size();if (length <= 0)return 0;TreeNode *root = buildBST(vals,0,length-1);return highBST(root);}
};

运用了两次递归,这代码写得好哇~

程序员面试金典——4.3高度最小的BST相关推荐

  1. 程序员面试金典——4.5检查是否为BST

    Solution1:我的答案 [笨方法]中序遍历,判断是否有序即可 /* struct TreeNode {int val;struct TreeNode *left;struct TreeNode ...

  2. 程序员面试金典——17.6最小调整有序

    程序员面试金典--17.6最小调整有序 Solution1:我的答案.垃圾算法 class Rearrange { public:vector<int> findSegment(vecto ...

  3. C#LeetCode刷题-程序员面试金典

    本文由 比特飞 原创发布,欢迎大家踊跃转载. 转载请注明本文地址:C#LeetCode刷题-程序员面试金典 | .Net中文网. C#LEETCODE刷题概述 概述 所有LeetCode程序员面试金典 ...

  4. 程序员面试金典 - 面试题 17.07. 婴儿名字

    题目难度: 中等 原题链接 今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 每年,政府都会公布一万个最常见的婴 ...

  5. 程序员面试金典(第 6 版)(简单篇)

    程序员面试金典 第6版 简单篇 简单篇 面试题 01.01. 判定字符是否唯一 面试题 01.02. 判定是否互为字符重排 面试题 01.03. URL化 面试题 01.04. 回文排列 面试题 01 ...

  6. 程序员面试金典 - 面试题 08.13. 堆箱子(DP)

    1. 题目 堆箱子.给你一堆n个箱子,箱子宽 wi.深 di.高 hi. 箱子不能翻转,将箱子堆起来时,下面箱子的宽度.高度和深度必须大于上面的箱子. 实现一种方法,搭出最高的一堆箱子.箱堆的高度为每 ...

  7. 程序员面试金典——18.9实时中位数

    程序员面试金典--18.9实时中位数 Solution1:我的答案.利用排序,比较弱智.. class Middle { public:vector<int> getMiddle(vect ...

  8. 程序员面试金典 - 面试题 10.03. 搜索旋转数组

    题目难度: 中等 原题链接 今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 搜索旋转数组.给定一个排序后的数组 ...

  9. 程序员面试金典--笔记(精华篇)

    原文链接:http://codeshold.me/2017/01/cracking_interview.html <程序员面试金典> 1-7章的总结 相关读物<金领简历:敲开苹果.微 ...

最新文章

  1. 用Inno Setup来解决.NetFramework安装问题
  2. Linux 学习基础入门之Linux发展史
  3. vs2019键盘钩子_C#键盘按键监视
  4. Mozilla计划向Firefox浏览器中添加违规警告
  5. 应用开发之WinForm开发
  6. 用于计算机安全防护的有,《计算机安全防护》PPT课件.ppt
  7. python继承问题_深入浅析python继承问题
  8. 《计算机应用基础》18春作业,【北语网院】18春《计算机应用基础》作业_2.pdf...
  9. 像人类一样理解言外之意,阿里AI最新研究成果被国际顶会收录
  10. 统计学习方法读书笔记4-感知机课后习题
  11. linux下架子网卡,Linux下新手装网卡指南
  12. [LeetCode] 100. Same Tree Java
  13. (day 44 - 滑动窗口 ) 剑指 Offer 53 - II. 0~n-1中缺失的数字
  14. kotlin中文开发文档+视频教程+Android Studio 3.0下载地址
  15. 国家计算机考试报名照片编辑器,Artensoft Photo Editor(电脑照片编辑软件) V1.5 官方版...
  16. android+自动拨打电话,自动拨打电话 - 好玩的代码
  17. Protues 汇编报错所选编译器MASM32未安装编译失败可以这样解决
  18. tkinter如何绑定鼠标和键盘等事件
  19. 天线学习笔记——串馈网络设计
  20. 地理科学与计算机技术的关系,地理信息系统与地理学的关系

热门文章

  1. 浅谈C#ref和out
  2. LeetCode-7.整数反转(越界问题)
  3. Hexo为文章设置目录与标签的方法
  4. stl之queue队列容器
  5. Ubuntu16.04+ROS Kinetic环境下svo编译运行
  6. (0)图像处理界面——C#调用C++图像处理的DLL
  7. mysql+基本代码_PHP+MySQL扎实基本功十句话_php
  8. es查询两列相减大于某个值的数据_南京师范大学汇编语言期末试卷
  9. 产生斜体的html标签,下列可以产生斜体字的 HTML 标签是_____________
  10. java 上界和下界,Java 泛型上下界(上下限)