1. 程式人生 > 實用技巧 >108.將有序陣列轉化為平衡二叉搜尋樹

108.將有序陣列轉化為平衡二叉搜尋樹

題目

將一個按照升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。

本題中,一個高度平衡二叉樹是指一個二叉樹每個節點的左右兩個子樹的高度差的絕對值不超過 1。

示例:

給定有序陣列: [-10,-3,0,5,9],
一個可能的答案是:[0,-3,9,-10,null,5],它可以表示下面這個高度平衡二叉搜尋樹:

分析

這道題和平衡二叉搜尋樹一般構建方法的區別在於陣列是有序的,因此相比起來這道題的難度要低很多。
這道題是要將有序陣列轉為二叉搜尋樹,所謂二叉搜尋樹,是一種始終滿足左<根<右的特性,如果將二叉搜尋樹按中序遍歷的話,得到的就是一個有序陣列了。那麼反過來,我們可以得知,根節點應該是有序陣列的中間點

,從中間點分開為左右兩個有序陣列,在分別找出其中間點作為原中間點的左右兩個子節點,這不就是是二分查詢法的核心思想麼。所以這道題考的就是二分查詢法

程式碼

class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        int n=nums.length,mid=n/2;
        if(n==0) return null;
        TreeNode root=new TreeNode(nums[mid]);
        root.left=sortedArrayToBST(Arrays.copyOfRange(nums,0,mid));
        root.right=sortedArrayToBST(Arrays.copyOfRange(nums,mid+1,n));
        return root;
    }
}

原題連結:https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree
參考:https://www.cnblogs.com/grandyang/p/4295245.html