LeetCode/Convert Sorted Array to Binary Search Tree
[ h tps : // / ㅇ t 여기. 이 m / p 로 b ぇ ms / ]
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.
Example:
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
2개의 subtree 사이의 깊이에 2이상의 차이가 없는 tree'를 만들 수 있다고 합니다.
해답·해설
해법 1
2개의 subtree 사이의 깊이도 1보다 큰 차이가 없는 것 같은 트리는 여러가지 생각되는 것입니다만, 문제문에도 있던 아래 그림과 같이,
(binarytree 라이브러리로 만들어 보았습니다만 이마이치군요...)
대원의 루트에서 좌우에 2개의 subtree가 나오고, 나머지는 1개밖에 subtree가 없는 듯한 트리를 생각해, 2개의 subtree의 깊이에 2 이상의 차이가 없는 트리
을 만드는 것이 간단한 알고리즘입니다. 보다 구체적으로는
[-10, -3, 0, 5, 9] -> left: [-10, -3], root: 0, right: [5, 9]
와 같이, 중앙값을 root로 하고, 중앙값보다 전의 값의 리스트를 root.left로, 중앙값보다 후의 값의 리스트를 root.right로 합니다.
그런 다음 root.left와 root.right에 대해 동일한 작업을 수행하는 재귀 구조로 만듭니다.
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
if not nums:
return None
mid = len(nums) // 2
root = TreeNode(nums[mid])
root.left = self.sortedArrayToBST(nums[:mid])
root.right = self.sortedArrayToBST(nums[mid+1:])
return root
해법 2
Discussion을 바라보고 있으면, 리스트의 슬라이스는 비용이 높다는 것으로, 수정안이 있었습니다.
class Solution:
def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
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)
파이썬 작업에 대한 비용은 다음 페이지에 정리되어 있습니다.
[ htps : // 우우키. py 응. 오 rg / moin / chimeko mp ぃ ty : 에 m 베 d : ]
Reference
이 문제에 관하여(LeetCode/Convert Sorted Array to Binary Search Tree), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mhiro216/items/49d244dd9da1d6e6f70d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)