递归建树
数组时一个有序的,那么以中间数为跟节点建树,左右两边节点数是相同的,就可以分为两个数组,左边数组为根节点左子树(都比它小),右边数组为根节点右子树(都比它大)。
递归依次取中间节点进行建树,那么最后建成的树既平衡又符合二叉搜索树
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
if(nums == null) return null;
TreeNode root = createTree(nums,0,nums.length - 1);
return root;
}
public TreeNode createTree(int [] nums, int left, int right){
if(left > right) return null;
int mid = left + (right - left) / 2;
TreeNode node = new TreeNode(nums[mid]);
node.left = createTree(nums,left,mid - 1);
node.right = createTree(nums,mid + 1,right);
return node;
}
}