[Leetcode] 0572. 다른 트리의 서브 트리

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

쉬운


두 개의 이진 트리의 루트가 주어지면 뿌리 그리고 하위 루트, 반품 진실 만약 서브트리가 있다면 뿌리 동일한 구조와 노드 값을 갖는 하위 루트 그리고 거짓 그렇지 않으면.

이진 트리의 서브트리 나무 노드로 구성된 트리입니다 나무 그리고 이 노드의 모든 자손들. 나무 나무 또한 그 자체의 서브트리로 간주될 수도 있습니다.

 

예시 1:

입력: 루트 = [3,4,5,1,2], 서브루트 = [4,1,2]
산출: 진실

예 2:

입력: 루트 = [3,4,5,1,2,null,null,null,null,0], 서브루트 = [4,1,2]
산출: 거짓

 

제약:

  • 노드의 수 뿌리 나무가 범위 내에 있습니다 [1, 2000].
  • 노드의 수 하위 루트 나무가 범위 내에 있습니다 [1, 1000].
  • -10 4 <= root.val <= 10 4
  • -10 4 <= subRoot.val <= 10 4

파이썬

				
					# 시간 복잡도: O(m*n) # 공간 복잡도: O(m+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 class 해결책: def isSameTree(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> bool: root1도 아니고 root2도 아니면: True를 반환합니다 root1도 아니고 root2도 아니면: False를 반환합니다 root1.val != root2.val이면: False를 반환합니다 self.isSameTree(root1.left, root2.left) and self.isSameTree(root1.right, root2.right) def isSubtree(self, root: Optional[TreeNode], subRoot: Optional[TreeNode]) -> bool: def dfs(node): node가 None이면: False를 반환합니다 elif self.isSameTree(node, subRoot): True를 반환합니다. dfs(node.left) 또는 dfs(node.right)를 반환합니다. dfs(root)를 반환합니다. root = TreeNode(3) root.left = TreeNode(4) root.left.left = TreeNode(1) root.left.right = TreeNode(2) root.right = TreeNode(5) subRoot = TreeNode(4) subRoot.left = TreeNode(1) subRoot.right = TreeNode(2) print(Solution().isSubtree(root, subRoot))
				
			
ko_KR한국어