리트코드 Recover Binary Search Tree 코드 및 해설 (파이썬)
2021. 6. 27. 16:25ㆍalgorithm
반응형
https://leetcode.com/problems/recover-binary-search-tree/
올바른 BST라면 inorder 순회를 했을 때 값들이 오름차순으로 정렬되어야 한다는 사실을 이용해 풀이했습니다. inorder 순회를 하면서 result에 값을 저장하고, 오름차순 정렬이 되지 않는 부분들의 노드를 발견하면 swap에 추가적으로 저장했습니다. 순회가 끝난 후 swap의 첫 노드와 마지막 노드의 값을 서로 교환했습니다.
https://codlingual.tistory.com/173?category=868745
# 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 recoverTree(self, root: TreeNode) -> None:
"""
Do not return anything, modify root in-place instead.
"""
result, swap = self.inorder(root, result=[], swap=[])
# swap의 첫 번째 값과 마지막 값을 서로 교환
swap[0].val, swap[-1].val = swap[-1].val, swap[0].val
# inorder traversal
def inorder(self, root, result, swap):
node = root
if node:
# 왼쪽 자식
if node.left:
result, swap = self.inorder(node.left, result, swap)
# 대소관계 맞지 않으면 swap에 저장
if result and result[-1].val >= node.val:
swap += [result[-1], node]
# 루트
result.append(node)
# 오른쪽 자식
if node.right:
result, swap = self.inorder(node.right, result, swap)
return result, swap
반응형
'algorithm' 카테고리의 다른 글
정렬된 배열에서 특정 수의 개수 구하기 코드 및 해설 (파이썬) (0) | 2021.06.28 |
---|---|
이진 탐색 (0) | 2021.06.28 |
리트코드 Populating Next Right Pointers in Each Node 코드 및 해설 (파이썬) (0) | 2021.06.23 |
백준 바이러스 코드 및 해설 (파이썬) (0) | 2021.06.22 |
프로그래머스 네트워크 코드 및 해설 (파이썬) (1) | 2021.06.22 |