1. 程式人生 > 其它 >將有序陣列轉換為二叉搜尋樹Java實現

將有序陣列轉換為二叉搜尋樹Java實現

技術標籤:力扣題庫leetcode

題目

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

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

示例:

給定有序陣列: [-10,-3,0,5,9],

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

解題思路

  • 對於該題來講,要先知道二叉搜尋樹的定義,簡單來講就是比根節點小的放左邊,比根節點大的放右邊,並且要平衡,左右高度差不超過一,那麼一個有序的陣列的中間那個節點做根節點才能保證不超過1.
  • 那麼遞迴的思想就出來了,吧陣列中間的那個節點為根節點返回,他的左邊元素是他的左子樹,右邊是右子樹。所以遞迴去呼叫函式。
  • ps:如果下面程式碼看完後,建議可以去搜Arrays工具類的copyOfRange()方法看看。

程式碼

class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        if(nums ==null || nums.length==0){
            return null;
        }
        if(nums.length==1){
            return new TreeNode(nums[0]);
        }
        int mid = nums.
length/2; TreeNode tree = new TreeNode(nums[mid]); int[] nums1 = new int[mid]; int[] nums2 = new int[nums.length-1-mid]; for(int i=0; i<mid;i++){ nums1[i]=nums[i]; } for(int i=mid+1; i<nums.length;i++){ nums2[i-mid-1]=nums[i]
; } tree.left= mid==0?null:sortedArrayToBST(nums1); tree.right= mid==nums.length?null:sortedArrayToBST(nums2); return tree; } }