108. Convert Sorted Array to Binary Search Tree
Description
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
Example:
Given the sorted array: [-10,-3,0,5,9],
One possible answer is: [0,-3,9,-10,null,5], which represents the following height balanced BST:
0
/ \
-3 9
/ /
-10 5
Solutions
看到题的时候毫无思路,要写平衡二叉查找树,我就去看了怎么写平衡树,看到插入的时候需要旋转,觉得很麻烦,就翻看了一下去年交的代码。
这里是用到了递归,思路是,如果是用手排的话,是先找到中间的元素之后,就会把数组分成两队,左堆和右堆。然后分别递归实现左边和右边的平衡二叉查找树。
这里很纠结的一个地方是,他的给的范例是,
0
/ \
-3 9
/ /
-10 5
,这样的,然后test的答案又是
0
/ \
-10 5
\ \
-3 9
这样的。这就让我很纠结middle怎么算。两种middle的算法我都试了,都是可以通过的。
也就是说,当只剩下两个数(偶数)的时候,先把大的数作为父节点,还是把小的数作为父节点,都是可以的。
Submissions
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
return dsf(nums,0,nums.length-1);
}
TreeNode dsf(int[] nums,int left,int right)
{
if(left>right) return null;
int mid=(1+left+right)/2;//这里mid=(left+right)/2也ok,题目没做要求
TreeNode root=new TreeNode(nums[mid]);
root.left=dsf(nums,left,mid-1);
root.right=dsf(nums,mid+1,right);
return root;
}
}
Summary
如何构建一个balanced BST。
排序后更好构建哦,都不用旋转啦。