Binary Tree Right Side View - LeetCode
Can you solve this real interview question? Binary Tree Right Side View - Given the root of a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom. Example 1: [https://asse
leetcode.com
아이디어
tree 리스트
bfs를 사용한 탐색 순서는 아래와 같다.
1
2 3
4 5 6 7
8 9 10 11 12 13 ...
이를 코드로 구현하여 tree 리스트를 만들었다.
queue = deque()
queue.append((root, 0))
tree = []
while queue:
curr, level = queue.popleft()
if curr == -1:
continue
tree.append((curr.val, level))
if curr.left or curr.right:
if curr.left: queue.append((curr.left, level + 1))
else: queue.append((-1, level + 1))
if curr.right: queue.append((curr.right, level + 1))
else: queue.append((-1, level + 1))
else:
continue
전체 코드
# 8:08 ~ 9:41 (1'33")
# 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
from collections import deque
class Solution:
def rightSideView(self, root: Optional[TreeNode]) -> List[int]:
if not root:
return []
queue = deque()
queue.append((root, 0))
tree = []
while queue:
curr, level = queue.popleft()
if curr == -1:
continue
tree.append((curr.val, level))
if curr.left or curr.right:
if curr.left: queue.append((curr.left, level + 1))
else: queue.append((-1, level + 1))
if curr.right: queue.append((curr.right, level + 1))
else: queue.append((-1, level + 1))
else:
continue
tree.reverse()
answer = []
level = -1
for t, l in tree:
if level == l: continue
level = l
answer.append(t)
answer.reverse()
return answer
다른 사람의 코드
문제를 풀면서 dfs를 사용하면 메모리 낭비나 연산 횟수를 줄일 수 있을 것 같다는 생각이 들었다. 그래서 다른 사람들의 풀이를 찾아보았다.
def rightSideView(self, root: TreeNode) -> List[int]:
def dfs(root, result_list, level):
if not root:
return
if root and level == len(result_list):
result_list.append(root.val)
dfs(root.right, result_list, level+1)
dfs(root.left, result_list, level+1)
return result_list
return dfs(root, [], 0)
dfs로 오른쪽 값 부터 방문하며, 해당 레벨에 처음 방문할 시에만 값을 저장한다. level을 따로 저장하지도 않고, 바로 정답 리스트를 반환하기 때문에 훨씬 좋은 코드라고 생각한다.
아래 글을 참고하여 dfs로도 풀어보면 좋을 것 같다. (코드 출처)
https://zhenyu0519.github.io/2020/03/12/lc199/
leetcode 199. Binary Tree Right Side View (Python)
leetcode 199. Binary Tree Right Side View (Python Solution)
zhenyu0519.github.io
'Coding Test > Python' 카테고리의 다른 글
[LeetCode] 228. Summary Ranges (easy, python) (0) | 2024.01.04 |
---|---|
[백준] 15686번: 치킨 배달(골드5, 파이썬) (0) | 2024.01.04 |
[LeetCode] 2. Add Two Numbers (medium, python) (0) | 2024.01.03 |
[백준] 15685번: 드래곤 커브(골드3, 파이썬) (1) | 2024.01.02 |
[백준] 15683번: 감시 (골드4, 파이썬) (0) | 2024.01.02 |