Boolean 이진 트리 평가하기

제로콜라좋아요·2024년 6월 1일
0

algorithem

목록 보기
13/37
post-thumbnail

문제설명

리프 노드는 값이 0 또는 1입니다. 여기서 0은 False를 나타내고 1은 True를 나타냅니다.
비리프(non-leaf) 노드는 값이 2 또는 3입니다. 여기서 2는 논리 OR를 나타내고 3은 논리 AND를 나타냅니다.
노드의 평가는 다음과 같습니다:

노드가 리프 노드인 경우, 그 값이 평가 결과입니다. 즉, True 또는 False입니다.
그렇지 않으면, 노드의 두 자식을 평가하고 그 값에 노드의 값을 적용하여 논리 연산을 수행합니다.
루트 노드의 평가 결과를 불리언 값으로 반환합니다.
완전 이진 트리(full binary tree)는 각 노드가 0 또는 2개의 자식을 가지는 이진 트리입니다.

예시1업로드중..

입력: root = [2,1,3,null,null,0,1]
출력: true
설명: 위 다이어그램은 평가 프로세스를 보여줍니다.
AND 노드는 False AND True = False로 평가됩니다.
OR 노드는 True OR False = True로 평가됩니다.
루트 노드는 True로 평가되므로 true를 반환합니다.

예시2

입력: root = [0]
출력: false
설명: 루트 노드는 리프 노드이고 false로 평가되므로 false를 반환합니다.

class Solution:
   def evaluateTree(self, root: Optional[TreeNode]) -> bool:
       if not root:
           return False
       
       
       if root.left is None and root.right is None:
           return root.val == 1

       left_val = self.evaluateTree(root.left)
       right_val = self.evaluateTree(root.right)
       
       
       if root.val == 2:
           return left_val or right_val
       elif root.val == 3:
           return left_val and right_val
       else:
           raise ValueError("Invalid node value")

< 내 코드의 흐름 >

  1. evaluateTree 메서드를 정의합니다. 이 메서드는 트리를 평가하여 불리언 값을 반환합니다.
  2. 루트 노드가 None인지 확인합니다.
  3. 루트 노드가 None이면 False를 반환합니다.
  4. 노드가 리프 노드인지 확인합니다 (즉, 자식 노드가 없는 경우).
  5. 리프 노드의 값이 1이면 True, 아니면 False를 반환합니다.
  6. 왼쪽 자식 노드를 재귀적으로 평가하여 left_val에 저장합니다.
  7. 오른쪽 자식 노드를 재귀적으로 평가하여 right_val에 저장합니다.
  8. 노드의 값이 2인지 확인합니다.
  9. 노드의 값이 2이면 OR 연산을 수행하여 결과를 반환합니다.
  10. 노드의 값이 3인지 확인합니다.
  11. 노드의 값이 3이면 AND 연산을 수행하여 결과를 반환합니다.
  12. 노드의 값이 2나 3이 아닌 경우를 처리합니다.
  13. 유효하지 않은 노드 값을 가진 경우 예외를 발생시킵니다.
profile
개발자계의 제로콜라

0개의 댓글