leetcode_【108】将有序数组转换成二叉搜索树
1.题目描述
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例:
给定有序数组: [-10,-3,0,5,9],
一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:
1 2 3 4 5 6 > 0 > / \ > -3 9 > / / > -10 5 >
2.解题思路
将一个排序array转化为平衡二叉搜索树: 平衡二叉树:对于每个根节点,左右子树高度差 <= 1; 二叉搜索树:对于每个节点,其左子树值<此节点值,右子树>此节点值。 要满足以上两个特点,我们自然想到以array中点值作为根节点值,并递归重建,这样就可以同时保证以上两个条件。
3.代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 执行用时 : 3 ms, 在所有 Java 提交中击败了8.50 %的用户 内存消耗 : 40.2 MB, 在所有 Java 提交中击败了29.40 %的用户 class Solution { public TreeNode sortedArrayToBST (int [] nums) { if (nums.length == 0 ) return null ; TreeNode root =new TreeNode( nums[nums.length/2 ]); root.left = sortedArrayToBST(Arrays.copyOfRange(nums,0 ,nums.length/2 )); root.right = sortedArrayToBST(Arrays.copyOfRange(nums,nums.length/2 +1 ,nums.length)); return root; } }
执行用时为2ms的范例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 class Solution { public TreeNode sortedArrayToBST (int [] nums) { return nums == null ? null : buildTree(nums, 0 , nums.length - 1 ); } private TreeNode buildTree (int [] nums, int left, int right) { if (left > right) { return null ; } int mid = left + (right - left) / 2 ; TreeNode root = new TreeNode(nums[mid]); root.left = buildTree(nums, left, mid - 1 ); root.right = buildTree(nums, mid + 1 , right); return root; } }
4.提交记录