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))