We can use DAC to build a height balanced BST, in a block of array from low to high, if low == high we are finding one node, just add it.

if low == high-1, we have two choice, here we only create a new node of nums[low] value and set its right child node to the next node(low+1, high).

Otherwise, mid = (low+high)/2. A new node of value nums[mid], and set its left child node to be the next node(low, mid-1) and the right child node to be the next node in the range of (mid+1, high).

Code:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        int len = nums.length;
        if(len == 0) return null;
        return addNode(nums, 0, len-1);
    }
    
    public TreeNode addNode(int[] nums, int low, int high){
        int mid = (low+high)/2;
        int val = nums[mid];
        TreeNode node = new TreeNode(val);
        if(low == high) return node;
        if(low == high-1){
            node.right = addNode(nums, mid+1, high);
        }
        else{
            node.left = addNode(nums, low, mid-1);
            node.right = addNode(nums, mid+1, high);
        }
        return node;
    }
}

 

posted on 2016-01-29 10:24  爱推理的骑士  阅读(169)  评论(0编辑  收藏  举报