리프 노드는 값이 0 또는 1입니다. 여기서 0은 False를 나타내고 1은 True를 나타냅니다.
비리프(non-leaf) 노드는 값이 2 또는 3입니다. 여기서 2는 논리 OR를 나타내고 3은 논리 AND를 나타냅니다.
노드의 평가는 다음과 같습니다:
노드가 리프 노드인 경우, 그 값이 평가 결과입니다. 즉, True 또는 False입니다.
그렇지 않으면, 노드의 두 자식을 평가하고 그 값에 노드의 값을 적용하여 논리 연산을 수행합니다.
루트 노드의 평가 결과를 불리언 값으로 반환합니다.
완전 이진 트리(full binary tree)는 각 노드가 0 또는 2개의 자식을 가지는 이진 트리입니다.
입력: root = [2,1,3,null,null,0,1]
출력: true
설명: 위 다이어그램은 평가 프로세스를 보여줍니다.
AND 노드는 False AND True = False로 평가됩니다.
OR 노드는 True OR False = True로 평가됩니다.
루트 노드는 True로 평가되므로 true를 반환합니다.
입력: 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")