leetcode(리트코드)-116 Populating Next Right Pointers in Each Node(python)
leetcode(리트코드)-116 Populating Next Right Pointers in Each Node(python)
leetcode 116 - Populating Next Right Pointers in Each Node 문제입니다.
1. 문제
https://leetcode.com/problems/populating-next-right-pointers-in-each-node/
2. Input , Output
3. 분류 및 난이도
Medium 난이도 문제입니다.
Top Interview 문제입니다.
4. 문제 해석
- Node라는 자료형을 가진 트리의 root가 들어옵니다.
- 해당 트리는 완벽한 이진트리로 주어지며, level이 끝날 때마다 해당 노드의 next값에 ‘#’를 부여하며 level을 돌면 됩니다.
5. code
코드설명
python
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
"""
# Definition for a Node.
class Node:
def __init__(self, val: int = 0, left: 'Node' = None, right: 'Node' = None, next: 'Node' = None):
self.val = val
self.left = left
self.right = right
self.next = next
"""
class Solution:
def connect(self, root: 'Node') -> 'Node':
# 빈 root가 들어올 경우
if not root :
return None
# BFS를 통해 해결할 것이므로
dq = deque()
#res는 더미노드입니다.
res = Node()
res2 =res
dq.append(root)
while dq :
size = len(dq)
#dq의 사이즈만큼 돕니다.
for i in range (size) :
node = dq.popleft()
#자식들을 dq에 넣어줍니다.
if node.left :
dq.append(node.left)
if node.right :
dq.append(node.right)
res.next = Node(node.val)
res = res.next
# 마지막의 노드인 경우 이미 '#'으로 이미 지정되어 있으므로 하나의 예외처리를 해줬습니다.
if len(dq)!= 0:
res.next= Node("#")
res = res.next
return res2.next
6. 결과 및 후기, 개선점
필요시 c++로 짜드리겠습니다.
This post is licensed under CC BY 4.0 by the author.