108. 将有序数组转换为二叉搜索树
题目:
思路:
【1】因为 题目要求 高度平衡,所以两边的层数大致要一致,那么如何一致呢,就是划分的左右子树的节点数大概也是差不多的,这样一想用二分就可以了,中间结点为根结点,然后分出来的两边又会再次形成原本的小问题(递归的做法)
代码展示:
//时间0 ms 击败 100% //内存42.1 MB 击败 54.36% //时间复杂度:O(n),其中 n 是数组的长度。每个数字只访问一次。 //空间复杂度:O(logn),其中 n 是数组的长度。 //空间复杂度不考虑返回值,因此空间复杂度主要取决于递归栈的深度,递归栈的深度是 O(logn)。 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public TreeNode sortedArrayToBST(int[] nums) { if (nums.length == 0) return null; if (nums.length == 1) return new TreeNode(nums[0]); return arrayToBST(nums,0,nums.length-1); } private TreeNode arrayToBST(int[] nums, int left, int right){ if (left == right) return new TreeNode(nums[left]); int mid = left + (right-left)/2; TreeNode root = new TreeNode(nums[mid]); if (mid != left){ root.left = arrayToBST(nums,left,mid-1); } if (mid != right){ root.right = arrayToBST(nums,mid+1,right); } return root; } }
分类:
leetcode题目
标签:
leetcode题等级-简单
, 面试经典 150 题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理