두 개의 이진 트리가 있다고 가정합니다. 두 트리에서 왼쪽에서 오른쪽으로 잎의 순서가 동일한지 확인해야 합니다.
따라서 입력이 다음과 같으면
두 트리에 대해 시퀀스가 [2, 6]이므로 출력은 True가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다.
- c :=새 목록
- inorder() 함수를 정의합니다. 이것은 뿌리를 내리고 c
- c가 null이면
- c :=새 목록
- 루트가 null이 아니면
- inorder(루트의 왼쪽, c)
- 루트의 왼쪽이 null이고 루트의 오른쪽이 null이면
- c 끝에 root 값 삽입
- inorder(루트의 오른쪽, c)
- 반환 c
- 기본 방법에서 다음을 수행합니다.
- inorder(root0)가 inorder(root1)와 같으면
- 참 반환
- 그렇지 않으면
- 거짓을 반환
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
예시
class TreeNode: def __init__(self, data, left = None, right = None): self.val = data self.left = left self.right = right class Solution: c = [] def inorder(self, root, c=None): if c is None: c = [] if root: self.inorder(root.left, c) if not root.left and not root.right: c.append(root.val) self.inorder(root.right, c) return c def solve(self, root0, root1): if self.inorder(root0) == self.inorder(root1): return True else: return False ob = Solution() root1 = TreeNode(1) root1.right = TreeNode(3) root1.right.left = TreeNode(2) root1.right.right = TreeNode(6) root2 = TreeNode(1) root2.left = TreeNode(3) root2.right = TreeNode(6) root2.left.left = TreeNode(2) print(ob.solve(root1, root2))
입력
root1 = TreeNode(1) root1.right = TreeNode(3)root1.right.left = TreeNode(2)
root1.right.right = TreeNode(6)
root2 = TreeNode(1)
root2.left = TreeNode(3)
root2.right = TreeNode(6)root2.left.left = TreeNode(2)
출력
True