第108题:
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。(来自LeetCode)
1、对于将一个升序的有序数组转化为一颗高度平衡的二叉搜索树,由于数组时升序的,所以其实这个数组就是二叉搜索树的中序遍历;
为使二叉搜索树高度平衡,两边的左右子树的最大高度差最大为1;
可以先从数组中先找出根节点,由于需要二叉搜索树高度平衡,所以利用二分法选择最中间的一个数作为根节点;
依次将左右两部分分别按照上面递归得出各自的根节点作为上一个根节点的左右节点;
最终得出结果。
面试题16.11
你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。
返回的长度需要从小到大排列。来源:力扣(LeetCode)
1、一开始以为是和爬楼梯差不多的题,把k个木板组合的个数算成了2^k个,晕,原来每个k个木板组合里有许多相同长度的跳水板;
当k为0时,跳水板长度为0;
当shorter和longer一样长时,k块木板,只能有一个组合,长度为k*shorter(longer)的跳水板;
当shorter和longer不一样长时,第一种组合是用k块shorter组成的跳水板;
第二种组合是用k-1块shorter和1块longer组成的跳水板;(其中不管longer是第几块,长度不变)
第三种组合是用k-2块shorter和2块longer组成的跳水板;
以此类推;
最终得出结果,其实有k+1种组合方式。