leetcode 108.將有序陣列轉換為二叉搜尋樹 Java

雲水冰發表於2020-10-04

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

題目連結

https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/

描述

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

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

示例

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

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

      0
     / \
   -3   9
   /   /
 -10  5

初始程式碼模板

/**
 * 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) {

    }
}

程式碼

根據有序陣列,建立平衡的二叉搜尋樹,也就相當於根據中序遍歷還原原來的二叉樹,只有一個遍歷,並不能完全確定二叉樹的結構。
以下只是可以參考的解決方案,每次取選取區間的中點作為子樹的根節點,劃分為兩個區間,每個區間再以中點分割,迴圈往復,知道只剩一個節點,這個時候就不能再次分割了。

class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        return createTree(nums, 0, nums.length - 1);
    }

    private TreeNode createTree (int[] nums, int left, int right) {
        if (left > right) {
            return null;
        }

        int mid = (left + right) / 2;

        TreeNode root = new TreeNode(nums[mid]);
        root.left = createTree(nums, left, mid - 1);
        root.right = createTree(nums, mid + 1, right);

        return root;
    }
}

相關文章