您的位置:首页 > 其它

把排序数组转换为高度最小的二叉搜索树

2016-10-26 21:58 183 查看
给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。

样例

给出数组 
[1,2,3,4,5,6,7]
,
返回
4
/   \
2     6
/ \    / \
1   3  5   7


/**

 * Definition of TreeNode:

 * public class TreeNode {

 *     public int val;

 *     public TreeNode left, right;

 *     public TreeNode(int val) {

 *         this.val = val;

 *         this.left = this.right = null;

 *     }

 * }

 */ 

public class Solution {

    /**

     * @param A: an integer array

     * @return: a tree node

     * 二叉排序树

     * (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;

       (2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;

    (3)左、右子树也分别为二叉排序树;

     */

    public TreeNode sortedArrayToBST(int[] A) {  

        // write your code here

        if(A==null) 

          return null;

        TreeNode root = null;

        return designTree(root,A,0,A.length-1);

    }  

    

    public TreeNode designTree(TreeNode node,int[] A,int first,int last){

         if(first>last){

             return null;

         }

         node = new TreeNode(0);

         int mid = (first+last)/2;

         node.val=A[mid];

         node.left=designTree(node.left,A,first,mid-1);

         node.right=designTree(node.right,A,mid+1,last);

         return node;

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: