이진 트리가 있다고 가정합니다. 이것이 완전한 이진 트리인지 여부를 확인해야 합니다. 완전한 이진 트리에서 알 수 있듯이 레벨은 마지막 가능성을 제외하고 노드로 채워지며 마지막 레벨의 모든 노드는 가능한 한 가장 왼쪽에 있습니다.
따라서 입력이 다음과 같으면
그러면 출력은 True
가 됩니다.이 문제를 해결하기 위해 다음 단계를 따르겠습니다-
-
q :=이중 종료 큐
-
q의 끝에 루트 삽입
-
플래그 :=거짓
-
q가 비어 있지 않은 동안 수행
-
temp :=q 왼쪽에서 삭제 후 요소
-
temp가 null이면
-
플래그 :=참
-
-
그렇지 않으면 플래그가 설정되고 temp가 null이 아닌 경우
-
거짓을 반환
-
-
그렇지 않으면
-
q 끝에 temp의 왼쪽 삽입
-
q 끝에 temp 오른쪽 삽입
-
-
-
참을 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
from collections import deque class TreeNode: def __init__(self, data, left = None, right = None): self.data = data self.left = left self.right = right class Solution: def solve(self, root): q = deque() q.append(root) flag = False while q: temp = q.popleft() if not temp: flag = True elif flag and temp: return False else: q.append(temp.left) q.append(temp.right) return True ob = Solution() root = TreeNode(9) root.left = TreeNode(7) root.right = TreeNode(10) root.left.left = TreeNode(6) root.left.right = TreeNode(8) print(ob.solve(root))
입력
root = TreeNode(9) root.left = TreeNode(7) root.right = TreeNode(10) root.left.left = TreeNode(6) root.left.right = TreeNode(8)
출력
True