给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。
样例
给出数组 [1,2,3,4,5,6,7]
, 返回
4
/ \
2 6
/ \ / \
1 3 5 7
注意事项
There may exist multiple valid solutions, return any of them.
解题思路:
二分搜索出中间元素,作为根节点,然后左边部分为左子树,右边部分为右子树,依次递归即可。
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/*
* @param A: an integer array
* @return: A tree node
*/
public TreeNode sortedArrayToBST(int[] A) {
// write your code here
if(A == null || A.length == 0)
return null;
return helper(A, 0, A.length-1); //二分查找,前闭后闭
}
private TreeNode helper(int[] nums, int start, int end){
if(start > end)
return null;
int mid = (start + end) >> 1;
TreeNode node = new TreeNode(nums[mid]);
node.left = helper(nums, start, mid-1);
node.right = helper(nums, mid+1, end);
return node;
}
}