1. 程式人生 > 實用技巧 >leetcode刷題筆記一百零八題 將有序陣列轉換為二叉搜尋樹

leetcode刷題筆記一百零八題 將有序陣列轉換為二叉搜尋樹

leetcode刷題筆記一百零八題 將有序陣列轉換為二叉搜尋樹

源地址:108. 將有序陣列轉換為二叉搜尋樹

問題描述:

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

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

示例:

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

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

 0
/ \

-3 9
/ /
-10 5

/**
將有序陣列轉換成二叉搜尋樹的核心思想是不斷取區間的中間結點作為樹根,使用遞迴思想繼續處理左右子樹區間,即可
*/
/**
 * Definition for a binary tree node.
 * class TreeNode(var _value: Int) {
 *   var value: Int = _value
 *   var left: TreeNode = null
 *   var right: TreeNode = null
 * }
 */
object Solution {
    def sortedArrayToBST(nums: Array[Int]): TreeNode = {
        def helper(nums: Array[Int], left: Int, right: Int): TreeNode = {
            if (left > right) return null
            val mid = (left + right + 1)/2
            val root = new TreeNode(nums(mid))
            root.left = helper(nums, left, mid-1)
            root.right = helper(nums, mid+1, right)
            return root
        }
        return helper(nums, 0, nums.length-1)
    }
}