각 노드에 0-9 사이의 숫자가 포함된 이진 트리가 있다고 가정하고 해당 노드의 순회가 회문인지 여부를 확인해야 합니다.
따라서 입력이 다음과 같으면
그러면 출력은 중위 순회가 [2,6,10,6,2]이므로 True가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 루트가 null이면
- 참 반환
- 스택 :=새 스택
- curr :=루트
- inorder :=새 목록
- 스택이 비어 있지 않거나 curr이 null이 아닌 동안 do
- curr이 null이 아닌 동안 do
- curr를 스택에 푸시
- curr :=curr의 왼쪽
- node :=스택에서 꺼낸 요소
- inorder 끝에 노드 값 삽입
- curr :=노드 오른쪽
- curr이 null이 아닌 동안 do
- inorder가 inorder와 역순으로 같으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
class TreeNode: def __init__(self, data, left = None, right = None): self.val = data self.left = left self.right = right class Solution: def solve(self, root): if not root: return True stack = [] curr = root inorder = [] while stack or curr: while curr: stack.append(curr) curr = curr.left node = stack.pop() inorder.append(node.val) curr = node.right return inorder == inorder[::-1] ob = Solution() root = TreeNode(6) root.left = TreeNode(2) root.right = TreeNode(6) root.right.left = TreeNode(10) root.right.right = TreeNode(2) print(ob.solve(root))
입력
root = TreeNode(6) root.left = TreeNode(2) root.right = TreeNode(6) root.right.left = TreeNode(10) root.right.right = TreeNode(2)
출력
True