题解 | #将升序数组转化为平衡二叉搜索树#

将升序数组转化为平衡二叉搜索树

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;
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务