题解 | #将升序数组转化为平衡二叉搜索树#
将升序数组转化为平衡二叉搜索树
http://www.nowcoder.com/practice/7e5b00f94b254da599a9472fe5ab283d
为了达到平衡树的特点:左右子树高度差不能超过1,也就是说左右子树的结点数量基本上一致(相差<1),那么就可以使用二分法的思想,将升序数组的中位数找到,然后分出左右2个区间分别作为左右子树,如此反复直到区间数为0即可。 因为需要遍历所有结点,所以时间复杂度O(N),空间复杂度O(N)。
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param num int整型一维数组
* @return TreeNode类
*/
public TreeNode sortedArrayToBST (int[] num) {
return generateTree(num, 0, num.length-1);
}
public TreeNode generateTree(int[] num, int left, int right){
if(left > right){
return null;
}
int mid = (left + right)/2;
TreeNode tree = new TreeNode(num[mid]);
tree.left = generateTree(num, left, mid-1);
tree.right = generateTree(num, mid+1, right);
return tree;
}
}