给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。
注意事项
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
*/
private int[] A;
public TreeNode sortedArrayToBST(int[] A) {
this.A = A;
if(A.length == 0) return null;
int topLoc = A.length / 2;
TreeNode top = new TreeNode(A[topLoc]);
top.left = getMidiant(0, topLoc - 1);
top.right = getMidiant(topLoc + 1, A.length - 1);
return top;
}
private TreeNode getMidiant(int start, int end) {
if(start > end) return null;
int middle = (start + end) / 2;
TreeNode midiant = new TreeNode(this.A[middle]);
midiant.left = getMidiant(start, middle - 1);
midiant.right = getMidiant(middle + 1, end);
return midiant;
}
}