本文最后更新于:2023年3月19日 晚上
面试题 04.02. 最小高度树,递归
给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。
示例:
1 2 3 4 5 6 7
| 给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5
|
思路
因为为升序排列的数组,每次递归都取中点作为节点,再将从中点分割的左右数组分别让左右孩子递归取中点值,就可以得到一个高度最小的树,当传入数组为空时,返回 null。
解答
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
var sortedArrayToBST = function (nums) { if (!nums.length) return null; const middle = Math.floor(nums.length / 2); const node = new TreeNode(nums[middle]); node.left = sortedArrayToBST(nums.slice(0, middle)); node.right = sortedArrayToBST(nums.slice(middle + 1)); return node; };
|