Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- matrix
- hash table
- binary tree
- backtracking
- string
- math
- leetcode
- list
- 미디움
- easy
- dfs
- DP
- linked list
- two pointers
- 리트코드
- Medium
- tree
- Python
- Depth-first Search
- 이진트리
- binary search
- Binary
- 중간
- 재귀
- recursive
- sorting
- 쉬움
- HashTable
- 문자열
- Array
Archives
- Today
- Total
부부의 코딩 성장 일기
LeetCode 108(Convert Sorted Array to Binary Search Tree, Python) 본문
Algorithm/LeetCode
LeetCode 108(Convert Sorted Array to Binary Search Tree, Python)
제로_콜라 2023. 11. 18. 19:001. 문제 링크
Convert Sorted Array to Binary Search Tree - LeetCode
Can you solve this real interview question? Convert Sorted Array to Binary Search Tree - Given an integer array nums where the elements are sorted in ascending order, convert it to a height-balanced binary search tree. Example 1: [https://assets.leetcod
leetcode.com
2. 문제 설명
- 오름차순으로 정렬된 리스트가 입력되었을 때 height-balanced 이진 트리 구조로 만들어 반환하기
- height-balanced란? : 임의의 노드의 좌우 서브트리 깊이 차이가 1보다 크지 않아야 함.
- 예시) nums = [-10,-3,0,5,9]가 주어졌을 때 아래 트리 구조를 반환
- 0
/ \
-3 9
/ /
-10 5
3. 처음 풀이(못 풀었음, 작동되지 않음)
- 아이디어는 앞에서부터 하나씩 꺼내어 노드, 왼쪽, 오른쪽에 넣는걸 반복하려 하였음.
- 하지만 내려갈 수록 가지가 많아져서 반복 작업을 어떻게 구현해야할 지 답답하였음.
# 시도했던 흔적, 작동되지 않음.
class Solution:
def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:
temp = result = TreeNode(nums[0])
# del nums[0]
print(nums)
temp = TreeNode(nums[0],TreeNode(nums[1]),TreeNode(nums[2]))
print(temp)
# def BST(nums,temp):
# if len(nums) > 0:
# temp = result = TreeNode(nums[0])
# if len(nums) == 1:
# temp = TreeNode(nums[0])
# del nums[0]
# elif len(nums) == 2:
# temp = TreeNode(nums[0],TreeNode(nums[1]),None)
# del nums[0:2]
# elif len(nums) > 2:
# temp = TreeNode(nums[0],TreeNode(nums[1]),TreeNode(nums[2]))
# del nums[0:3]
# print(nums,result,temp)
# BST(nums,temp.left)
# BST(nums,temp.right)
# return temp
# BST(nums,temp)
return result
4. 다른 풀이
- 힌트만 얻으려고 내 코드를 GPT에게 살짝 보여주었는데 정답을 알려줌.
- 주어진 리스트의 중간 지점을 잡아 루트 노드에 넣고, 왼쪽 절반 리스트는 왼쪽 서브 트리에, 오른쪽 절반 리스트는 오른쪽 서브 트리에 재귀 함수 처리
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:
if not nums:
return None
mid = int(len(nums)/2)
root = TreeNode(nums[mid])
root.left = self.sortedArrayToBST(nums[:mid])
root.right = self.sortedArrayToBST(nums[mid+1:])
return root
5. 배운 점
- 역시 이진 트리 구조에서는 재귀 함수가 자주 사용된다.
- 이진 트리가 주어지고 판단하거나 순회하는 문제는 풀어보았는데 반대로 트리를 구성하는 것은 처음이라 어려웠다.
'Algorithm > LeetCode' 카테고리의 다른 글
LeetCode 112(Path Sum, Python) (0) | 2023.11.21 |
---|---|
LeetCode 111(Minimum Depth of Binary Tree, Python) (0) | 2023.11.20 |
LeetCode 101(Symmetric Tree, Python) (0) | 2023.11.16 |
LeetCode 100(Same Tree, Python) (0) | 2023.11.15 |
LeetCode 94(Binary Tree Inorder Traversal, Python) (1) | 2023.11.14 |