LeetCodeに毎日挑戦してみた 108. Convert Sorted Array to Binary Search Tree(Python、Go)


Leetcodeとは

leetcode.com
ソフトウェア開発職のコーディング面接の練習といえばこれらしいです。
合計1500問以上のコーデイング問題が投稿されていて、実際の面接でも同じ問題が出されることは多いらしいとのことです。

golang入門+アルゴリズム脳の強化のためにgoとPythonで解いていこうと思います。(Pythonは弱弱だが経験あり)

24問目(問題108)

108. Convert Sorted Array to Binary Search Tree

問題内容

Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.

(日本語訳)

要素が昇順で並べ替えられている配列が与えられた場合、それを高さバランスのとれたBSTに変換します。

この問題では、高さバランスのとれた二分木は、すべてのノードの2つのサブツリーの深さが1を超えて異ならない二分木として定義されます。

Example:

Given the sorted array: [-10,-3,0,5,9],

One possible answer is: [0,-3,9,-10,null,5], which represents the following height balanced BST:

      0
     / \
   -3   9
   /   /
 -10  5

考え方

  1. バランスを取れた二分木にするために、真ん中の位置をmidとして決めます

  2. midはleftとright(Len(nums))で決まります

  3. rootが決まったらそこにleftとrightを作成していきます

解答コード

class Solution(object):
    def sortedArrayToBST(self, nums):
        def convert(left, right):
            if left > right:
                return None
            mid = (left + right) // 2
            node = TreeNode(nums[mid])
            node.left = convert(left, mid - 1)
            node.right = convert(mid + 1, right)
            return node
        return convert(0, len(nums) - 1)
  • Goでも書いてみます!
func sortedArrayToBST(nums []int) *TreeNode {
    if len(nums) == 0 {
        return nil
    }
    return &TreeNode{
        Val:   nums[len(nums)/2],
        Left:  sortedArrayToBST(nums[:len(nums)/2]),
        Right: sortedArrayToBST(nums[len(nums)/2+1:]),
    }
}