前端算法-将有序数组转换为二叉搜索树

简介: 前端算法-将有序数组转换为二叉搜索树

题目


给你一个整数数组 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);
};
相关文章
|
2月前
|
算法 前端开发 数据可视化
数据结构与算法在前端开发中的实际应用
本文将探讨数据结构与算法在前端开发中的实际应用,重点介绍在处理大规模数据、优化性能和提升用户体验方面的具体场景和解决方案。
|
15天前
|
算法 前端开发
前端算法 岛屿的最大面积 DFS(深度优先搜索)
前端算法 岛屿的最大面积 DFS(深度优先搜索)
11 0
|
3月前
|
算法
|
4月前
|
存储 算法
算法题解-二叉搜索树中第K小的元素
算法题解-二叉搜索树中第K小的元素
|
4月前
|
存储 算法 JavaScript
JS算法-输入有序数组
JS算法-输入有序数组
|
4月前
|
算法 前端开发
前端算法-路径总和
前端算法-路径总和
|
4月前
|
算法 前端开发
前端算法-平衡二叉树
前端算法-平衡二叉树
|
4月前
|
算法 前端开发
前端算法-对称二叉树
前端算法-对称二叉树
|
4月前
|
存储 算法 前端开发
前端算法- 二叉树的中序遍历
前端算法- 二叉树的中序遍历
|
11天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。