오늘의 공부 키워드
- 이진검색 트리(BST) 구조 반전
- 226 Invert Binary Tree
226 . Invert Binanay Tree
문제 해석
"Binary Tree Invert" 문제는 주어진 이진 트리(Binary Tree)의 구조를 반전시키는 문제입니다. 이진 트리란 각 노드가 최대 두 개의 자식을 가지는 트리입니다. 이 문제에서 반전이란 왼쪽 자식과 오른쪽 자식을 서로 바꾸는 것을 의미합니다.
4
/ \
2 7
/ \ / \
1 3 6 9
4
/ \
7 2
/ \ / \
9 6 3 1
문제 해결 방법
이 문제를 해결하기 위해, 다음의 단계들을 따릅니다:
- 기본 아이디어: 트리의 각 노드에 대해, 그 노드의 왼쪽 자식과 오른쪽 자식을 서로 교환합니다.
- 재귀 함수 사용: 트리 구조는 재귀적으로 정의되므로, 각 노드에 대해 재귀적으로 왼쪽과 오른쪽 자식을 교환하는 방법을 사용할 수 있습니다.
단계별 해결 방법
- 기본 케이스: 현재 노드가 None인 경우(즉, 트리가 비어 있거나 리프 노드의 자식인 경우), 그대로 None을 반환합니다.
- 재귀적 호출: 현재 노드의 왼쪽 자식과 오른쪽 자식을 서로 교환하고, 각각의 자식에 대해 다시 이 과정을 재귀적으로 수행합니다.
코드설명
from typing import Optional
# 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 invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
# 트리가 비어 있는 경우
if root is None:
return None
# 왼쪽과 오른쪽 자식을 교환합니다.
root.left, root.right = root.right, root.left
# 재귀적으로 각 자식에 대해 invertTree를 호출합니다.
self.invertTree(root.left)
self.invertTree(root.right)
return root
코드 설명
- 주어진 이진 트리가 비어 있는지 확인합니다. 비어 있다면 None을 반환합니다.
- 현재 노드의 왼쪽 자식과 오른쪽 자식을 교환합니다.
- 왼쪽 자식과 오른쪽 자식에 대해 재귀적으로 invertTree 메서드를 호출하여 각각의 하위 트리를 반전시킵니다.
- 최종적으로 반전된 트리의 루트 노드를 반환합니다.
이 알고리즘은 모든 노드에 대해 한 번씩 방문하므로, 시간 복잡도는 O(n)이며, 여기서 n은 트리의 노드 수입니다.
오늘의 회고
- 이진 검색 트리의 문제가 정말 많다는걸 느꼈다.
- 이진 검색 트리를 정말 잘 익혀야 한다는 생각이 든다.
- 여전히 개념에 대한 이해가 안되어 코드 리뷰 수준으로 문제를 푼점은 다시한번 아쉽게 된다.
- 그래도 이렇게 기록으로 남기는건 나중에 다시한번 풀어보려는 이유 및
어떻게 풀었는지 알기 위해서 기록을 남긴다. - LV1의 문제라지만 생각을 많이 하는 문제는 정말 좋은거 같다.
'python' 카테고리의 다른 글
99클럽 코테 스터디 7일차 TIL +탐욕법 Greedy (0) | 2024.06.04 |
---|---|
99클럽 코테 스터디 6일차 TIL + 이진 검색 트리(6) (1) | 2024.06.03 |
99클럽 코테 스터디 4일차 TIL + 이진 검색 트리(3) (0) | 2024.06.01 |
99클럽 코테 스터디 3일차 TIL + 이진 검색 트리(2) (0) | 2024.05.31 |
99클럽 코테 스터디 2일차 TIL + 이진 검색 트리 (0) | 2024.05.30 |