leetcode- 将有序数组转换为二叉搜索树(java)

将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。

本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

示例:

给定有序数组: [-10,-3,0,5,9],

一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:

      0
     / \
   -3   9
   /   /
 -10  5


可以发现规律:
      0
     / \
   -3   9
每一个根结点都是三个结点的中值。 探索二叉树我们选择用中序遍历。
根据条件:递增数组,选取中值,我们可以采用二分法,nums[mid]就是中间结点,按照此方法同时可以解决平衡问题。
/**
* Definition for a binary tree node.
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode(int x) { val = x; }
* }
*/
class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        return sortedArrayToBST(nums,0,nums.length-1);
        
    }
    public TreeNode sortedArrayToBST(int [] nums,int left,int right){
        if(left>right)return null;                                        //边界条件,注意是left>right  
        int mid=(left+right)/2;
        TreeNode root=new TreeNode(nums[mid]);          
        root.left=sortedArrayToBST(nums,left,mid-1);        //递归向左探索,范围变成left~mid-1;
        root.right=sortedArrayToBST(nums,mid+1,right);
        return root;
    }
}

 

posted @ 2018-08-18 08:30  吃土豆鸭  阅读(1690)  评论(0编辑  收藏  举报