LeetCode in Kotlin

108. Convert Sorted Array to Binary Search Tree

Easy

Given an integer array nums where the elements are sorted in ascending order, convert it to a height-balanced binary search tree.

A height-balanced binary tree is a binary tree in which the depth of the two subtrees of every node never differs by more than one.

Example 1:

Input: nums = [-10,-3,0,5,9]

Output: [0,-3,9,-10,null,5]

Explanation: [0,-10,5,null,-3,null,9] is also accepted:

Example 2:

Input: nums = [1,3]

Output: [3,1]

Explanation: [1,null,3] and [3,1] are both height-balanced BSTs.

Constraints:

Solution

import com_github_leetcode.TreeNode

/*
 * Example:
 * var ti = TreeNode(5)
 * var v = ti.`val`
 * Definition for a binary tree node.
 * class TreeNode(var `val`: Int) {
 *     var left: TreeNode? = null
 *     var right: TreeNode? = null
 * }
 */
class Solution {
    fun sortedArrayToBST(num: IntArray): TreeNode? {
        /*1. Set up recursion*/
        return makeTree(num, 0, num.size - 1)
    }

    private fun makeTree(num: IntArray, left: Int, right: Int): TreeNode? {
        /*2. left as lowest# can't be greater than right*/
        if (left > right) {
            return null
        }
        /*3. Set median# as node*/
        val mid = (left + right) / 2
        val midNode = TreeNode(num[mid])
        /*4. Set mid node's kids*/
        midNode.left = makeTree(num, left, mid - 1)
        midNode.right = makeTree(num, mid + 1, right)
        /*5. Sends node back || Goes back to prev node*/
        return midNode
    }
}