[Leetcode] 0951. 등가 이진 트리 뒤집기

Python, C++, JavaScript, SQL 및 TypeScript의 다양한 LeetCode 솔루션을 살펴보세요. 여러 프로그래밍 언어로 인터뷰 준비, 학습 및 코드 연습에 적합합니다. Github 레포 링크

중간


이진 트리의 경우 , 우리는 정의할 수 있습니다 플립 작업 다음과 같습니다: 아무 노드나 선택하고 왼쪽과 오른쪽 자식 서브 트리를 바꿉니다.

이진 트리 엑스 ~이다 플립 동등물 이진 트리로 와이 만약 우리가 할 수만 있다면 엑스 ~와 같다 와이 몇 번의 뒤집기 작업 후.

두 개의 이진 트리의 루트가 주어지면 루트1 그리고 루트2, 반품 진실 두 나무가 뒤집혀서 동등하거나 거짓 그렇지 않으면.

 

예시 1:

뒤집힌 나무 다이어그램
입력: root1 = [1,2,3,4,5,6,null,null,null,7,8], root2 = [1,3,2,null,6,4,5,null,null,null,null,8,7]
산출: 진실
설명: 우리는 값 1, 3, 5를 가진 노드를 뒤집었습니다.

예 2:

입력: 루트1 = [], 루트2 = []
산출: 진실

예시 3:

입력: 루트1 = [], 루트2 = [1]
산출: 거짓

 

제약:

  • 각 트리의 노드 수는 범위 내에 있습니다. [0, 100].
  • 각 나무에는 고유한 노드 값 범위 내에서 [0, 99].

파이썬

				
					# 시간 복잡도: O(n) # 공간 복잡도: O(n) from typing import Optional class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def traverse(node): if node is None: return if node.val: print(node.val) if node.left: traverse(node.left) if node.right: traverse(node.right) class 솔루션: def flipEquiv(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> bool: if root1 and not root2: if root1 or not root2: return True if root1 or not root2: return False if root1.val != root2.val: return False return (self.flipEquiv(root1.left, root2.left) and self.flipEquiv(root1.right, root2.right)) or (self.flipEquiv(root1.left, root2.right) 및 self.flipEquiv(root1.right, root2.left)) root1 = 트리노드(1) root1.left = 트리노드(2) root1.right = 트리노드(3) root1.left.left = 트리노드(4) root1.left.right = 트리노드(5) root1.right.left = 트리노드(6) root1.left.right.left = 트리노드(7) root1.left.right.right = 트리노드(8) root2 = 트리노드(1) root2.left = 트리노드(3) root2.right = 트리노드(2) root2.left.right = 트리노드(6) root2.right.left = 트리노드(4) root2.right.right = 트리노드(5) root2.right.right.left = 트리노드(8) root2.right.right.right = 트리노드(7) print(Solution().flipEquiv(root1, root2))
				
			
ko_KR한국어