주어진 두 이진트리 q
와 p
가 같은지 판별하는 문제다.
Input: p = [1,2,3], q = [1,2,3]
Output: true
두 트리를 비교했을 때 같지 않은 조건은 다음과 같다.
위 조건을 기반으로 DFS와 BFS로 풀어보았다.
class Solution:
def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:
if not p and not q:
return True
elif not p or not q:
return False
elif p.val != q.val:
return False
else:
return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
p
와 q
가 모두 None인 경우 두 트리 모두 해당 위치에 노드가 존재하지 않는다는 뜻이므로 True를 반환한다.from collections import deque
class Solution:
def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:
queueP, queueQ = deque(), deque()
queueP.append(p), queueQ.append(q)
while queueP and queueQ:
p_down, q_down = queueP.popleft(), queueQ.popleft()
if not p_down and not q_down:
continue
if not p_down or not q_down or p_down.val != q_down.val:
return False
queueP.append(p_down.left), queueP.append(p_down.right)
queueQ.append(q_down.left), queueQ.append(q_down.right)
return not queueP and not queueQ
p
에대한 큐와 q
에 대한 큐를 각각 만들어 각 트리의 head를 큐에 삽입 후 BFS를 시작한다.