题目
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。
高度平衡二叉树是一棵满足每个节点的左右两个子树的高度差的绝对值不超过1的二叉树。
输入: nums = [1,3] 输出: [3,1] 解释: [1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。
题解
这道题我们采用中序遍历递归的方式实现,我们在进入函数中先判断当前出参nums
的长度是否为0
,如果为0
则直接返回null
,接下来定义个dfs
函数,此函数接受三个入参,分别是数据nums
,左节点位置left
,右节点位置right
,在函数中我们判断一下当前的出参left
是否大于出参right
如果是则直接返回null
,接下来我们声明一个mid
变量,我们使用Math
函数中的floor
方法将出参left
加上出参right
减去出参left
的值除以2
的值,进行向下取整,得出中位数,然后在声明一个root
变量,它是使用TreeNode(nums[mid])
创建出来的节点,接下来调用自身传入对应参数进行执行并将返回结果赋值给root
变量的左子树,root
变量的右子树赋值与root
变量的左子树赋值操作一样只不过传入参数需要变动,在将root
变量返回出去,最后调用dfs
方法将所需参数传递进去,将dfs
方法执行后的返回结果直接返回
/** * @param {number[]} nums * @return {TreeNode} */ var sortedArrayToBST = function(nums) { if (nums.length === 0) return null; let dfs = (nums, left, right) => { if (left > right) return null; let mid = Math.floor(left + (right - left) / 2); let root = new TreeNode(nums[mid]); root.left = dfs(nums, left, mid - 1); root.right = dfs(nums, mid + 1, right); return root; } return dfs(nums, 0, nums.length - 1); };