LintCode - 把排序數組轉換為高度最小的二叉搜索樹(普通)

版權聲明:本文為博主原創文章,未經博主允許不得轉載。

難度:容易
要求:

給一個排序數組(從小到大),將其轉換為一棵高度最小的排序二叉樹。

樣例
給出數組 [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
     */
    public TreeNode sortedArrayToBST(int[] A) {
        // write your code here
        if (A == null || A.length == 0) {
            return null;
        }
        return create(A, 0, A.length - 1);
    }

    public TreeNode create(int[] A, int left, int right) {
        if(left == right){//處理[-1,1]的情況
            return new TreeNode(A[left]);
        }if (left < right) {
            int mid = (left + right) >> 1;
            TreeNode node = new TreeNode(A[mid]);
            node.left = create(A, left, mid - 1);
            node.right = create(A, mid + 1, right);
            return node;
        } else if (left == right) {//處理[-1,1]的情況
            return new TreeNode(A[left]);
        }
        return null;
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容