ie的常用网站,外贸网站如何换域名,班级优化大师官方网站,焦作网站建设焦作给你一个整数数组 nums #xff0c;其中元素已经按 升序 排列#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 示例 1#xff1a; 输入#xff1a;nums [-10,-3,0,5,9]
输出#xff1a;[0,-3,9,-10,null,5]
解释#xff1a;[0,-10,5,null,-3,null,9] 也将被视为正确答…给你一个整数数组 nums 其中元素已经按 升序 排列请你将其转换为一棵 平衡 二叉搜索树。 示例 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,null,3] 和 [3,1] 都是高度平衡二叉搜索树。
二叉搜索数的概念 左子树的所有键值均小于其根节点的键值。 右子树的所有键值均大于其根节点的键值。
解题方法递归
1.由题得这个数组是升序排列所以我们首先需要找到其中间值通过lo (hi - lo) / 2来不断更新中间值即当前根节点的值。
2.然后分别进入左右子树的递归。 左子树的递归将hi的指针往左移动。 右子树的递归将lo的指针往右移动。
/*** 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) {return dfs(nums, 0, nums.length - 1);}private TreeNode dfs(int[] nums, int lo, int hi) {if (lo hi) {return null;}int mid lo (hi - lo) / 2;TreeNode root new TreeNode(nums[mid]);root.left dfs(nums, lo, mid - 1);root.right dfs(nums, mid 1, hi);return root;}
}