leetcode 108. 将有序数组转换为二叉搜索树
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。
高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。
示例 1:
输入:nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]
解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:
示例 2:
输入:nums = [1,3]
输出:[3,1]
解释:[1,3] 和 [3,1] 都是高度平衡二叉搜索树。
提示:
1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums 按 严格递增 顺序排列
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
先求出中点,就是根节点,之后递归,左节点都在中点的左边,右节点都在中点的右边,直到超出数组返回停止。
public TreeNode sortedArrayToBST(int[] nums) { if (nums == null || nums.length == 0) { return null; } int length = nums.length; int st = 0; int end = length - 1; int m = st + ((end - st) >> 1); TreeNode root = new TreeNode(nums[m]); adjust(nums, root, st, end, m); return root; } /** * 调整 * * @param nums 数组 * @param node 节点 * @param st 数组开始索引 * @param end 数组结束索引 * @param m 中点 */ private static void adjust(int[] nums, TreeNode node, int st, int end, int m) { if (st > end) { return; } int l = st + ((m - 1 - st) >> 1); int r = m + 1 + ((end - 1 - m) >> 1); if (l >= st) { node.left = new TreeNode(nums[l]); adjust(nums, node.left, st, m - 1, l); } if (r >= m + 1 && r <= end) { node.right = new TreeNode(nums[r]); adjust(nums, node.right, m + 1, end, r); } }
时间上还可以,空间上较为拉跨。。