문제
이진트리가 있을 때, 형제 노드가 없는 노드의 키를 출력하라. 형제 노드가 없는 노드가 없으면 -1을 출력하라.
37
/
20
/
113
출력: [20, 113]
풀이
형제 노드를 찾으려면 레벨 순서 순회를 해야한다.
레벨 순서 순회를 하면서 left 노드가 있을 때, right 노드가 없으면 결과 리스트에 해당 노드를 추가해준다.
반대의 경우도 마찬가지이다.
def find_has_no_sibling(tree):
res, q = [], [tree.root]
while q:
node = q.pop(0)
if node.left:
q.append(node.left)
if not node.right:
res.append(node.left.data)
continue
if node.right:
q.append(node.right)
if not node.left:
res.append(node.right.data)
continue
return res if res else [-1]
실행 결과
tree1 = Tree()
tree1.make_tree([37, 20, None, 113])
print(find_has_no_sibling(tree1))
>>> [20, 113]
tree2 = Tree()
tree2.make_tree([1,2,3])
print(find_has_no_sibling(tree2))
>>> [-1]
tree3 = Tree()
tree3.make_tree(["A", "B", "C", "D", "E", "F", None, "G"])
print(find_has_no_sibling(tree3))
>>> ['F', 'G']
'Python' 카테고리의 다른 글
[좌충우돌, 파이썬으로 자료구조 구현하기] Heapify 구현하기 (1) | 2023.09.18 |
---|---|
[좌충우돌, 파이썬으로 자료구조 구현하기] 힙(heap) 구현하기 (0) | 2023.09.16 |
[좌충우돌, 파이썬으로 자료구조 구현하기] 이진 트리에서 키를 삭제하기 (0) | 2023.09.14 |
[좌충우돌, 파이썬으로 자료구조 구현하기] 이진트리에 키 삽입하기 (0) | 2023.09.14 |
[좌충우돌, 파이썬으로 자료구조 구현하기] 이진트리 표현하기 (연결리스트) (0) | 2023.09.13 |