일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- dfs #bfs #이진트리 #파이썬 #리트코드
- leetcode #python #dfs #재귀
- 코틀린 #Do it #깡샘 #안드로이드
- exoplayer #mediaplayer #엑소플레이어 #안드로이드 #android
- dfs #이진트리 #트리구조 #직렬화 #역직렬화 #파이썬 #리트코드 #leetcode #python
- 2004 #조합 0의 개수 #백준
- handler #looper #thread #runnable #핸들러 #루퍼 #스레드 #러너블
- AsyncTask #doinbackground #스레드 #thread #android #안드로이드
- python #백준 #2580 #스도쿠 #dfs #백트래킹
- dfs #bfs #트리구조 #이진트리 #leetcode #python #파이썬
- 다익스트라 #알고리즘 #bfs #그리디 #다이나믹프로그래밍 #leetcode #python
- final #java #자바 #안드로이드
- leetcode #subsets #dfs #itertools #python
- dfs #bfs #트리구조 #이진트리 #leetcode #파이썬 #python
- 아스테리스크 #Asterisk #파이썬
- 해시테이블 #heapq #파이썬 #리트코드 #알고리즘
- 파이썬 #zip
- dfs #python #leetcode
- 다익스트라 #dijkstra #leetcode #파이썬 #python #algorithm #787
- context #android #getApplicationContext #activity #생명주기 #lifecycle
- Python #leetcode #dfs #그래프 #백트래킹
- python #백준 #9375 #패션왕 #신해빈
- dfs #그래프 #graph #python #leetcode #course #schedule
- dfs #bfs #leetcode #python
- 백준 #파이썬 #bfs #백트래킹 #1697 #숨바꼭질
- 리트코드 #팰린드롬 #파이썬
- dfs #leetcode #python
- gcd #최대공약수 #백준 #2981 #검문
- dfs #leetcode #python #graph #그래프
- dfs #python #leetcode #combination
- Today
- Total
멋진 개발자가 되고 싶다
[LeetCode/Python] 226.이진 트리 반전(Invert Binary Tree) 본문
[LeetCode/Python] 226.이진 트리 반전(Invert Binary Tree)
오패산개구리 2021. 8. 7. 19:36
Given the root of a binary tree, invert the tree, and return its root.
Example
Input: root = [4,2,7,1,3,6,9]
Output: [4,7,2,9,6,3,1]
1. 파이썬다운 방식
1
2
3
4
5
6
7
8
9
10
11
12
|
# 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:
root.left, root.right = self.invertTree(root.right), self.invertTree(root.left)
return root
return None
|
cs |
해설
재귀 구조로 쉽게 해결할 수 있다.
코드 상으로 self.invertTree(root.right)가 먼저 시작하므로
최종 아랫단에서는 "9"에서 시작한다.
참고로 마지막 return None은 생략이 가능하다.
파이썬에서는 아무것도 리턴하지 않으면 자연스럽게 None을 할당하기 때문이다.
2. 반복 구조로 BFS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# 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]:
queue = collections.deque([root])
while queue:
node = queue.popleft()
# 부모 노드로부터 하향식 스왑
if node:
node.left, node.right = node.right, node.left
queue.append(node.left)
queue.append(node.right)
return root
|
cs |
해설
위에서 아래로 내려가면서 스왑하는 코드이다.
(너비 우선 탐색)
deque를 사용하였고 root의 경우 값을 참조하였으므로
최종적으로 root를 리턴하면 된다.
3. 반복 구조로 DFS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# 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]:
stack = collections.deque([root])
while stack:
node = stack.pop()
# 부모 노드로부터 하향식 스왑
if node:
node.left, node.right = node.right, node.left
stack.append(node.left)
stack.append(node.right)
return root
|
cs |
해설
2번 코드에서 바뀐 거라곤 popleft와 pop의 차이 정도?
하지만 진행 순서는 확연히 다르다.
이 코드는 깊이 우선 탐색이 된다.
4. 반복 구조로 DFS 후위 순회
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# 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]:
stack = collections.deque([root])
while stack:
node = stack.pop()
if node:
stack.append(node.left)
stack.append(node.right)
node.left, node.right = node.right, node.left # 후위 순회
return root
|
cs |
해설
3번 코드에서 stack에 추가해주는 단계를 먼저 진행했을 뿐이다.
이렇게 바꾸면 전위 순회였던 3번 코드에서 후위 순회로 변경되는 것인데
사실 아직 부족해서 이게 왜 후위 순회인지 모르겠다.
나중에 알게되면 추가하겠다.
댓글로 알려주시면 ㄳ
※ 전위 순회
뿌리를 먼저 방문하는 방식
※ 후위 순회
하위 트리를 모두 방문 후 뿌리를 방문하는 방식
'Algorithm Study > leetcode' 카테고리의 다른 글
[LeetCode/Python]110.균형 이진 트리(Balanced Binary Tree) (0) | 2021.08.08 |
---|---|
[LeetCode/Python] 297.이진 트리 직렬화 & 역직렬화(Serialize and Deserialize Bonary Tree) (0) | 2021.08.08 |
[LeetCode/Python] 687.가장 긴 동일 값의 경로(Longest Univalue Path) (0) | 2021.08.07 |
[LeetCode/Python] 543.이진 트리의 직경(Diameter of Binary Tree) (0) | 2021.08.07 |
[LeetCode/Python] 104. 이진 트리의 최대 깊이(Maximum Depth of Binary Tree) (0) | 2021.08.07 |