
DFS를 기반으로 한 재귀적 알고리즘
이 문제는 이진 트리가 좌우 대칭인지 확인하는 것이 문제의 핵심.
기존 100번 문제는 두 트리를 동시에 내려가며 "같은지"를 확인하는 데 초점을 두었지만 지금은 거울 형식으로 대칭하는 지 확인하는 것인 핵심인 문제임
여전히 재귀적 DFS. 100번 문제와 비슷하지만, 비교 대상이 "동일성"이 아니라 "대칭성"이라서 자식 노드의 연결 방향이 반대인 점만 다르다는 것을 알고 풀면 됨
- "Symmetric Tree"는 트리가 거울 대칭인지 확인하는 문제. 즉, 루트의 왼쪽 서브트리와 오른쪽 서브트리가 서로 대칭이어야 함
- 예를 들어, 왼쪽 서브트리의 왼쪽 자식은 오른쪽 서브트리의 오른쪽 자식과 같아야 하고, 왼쪽 서브트리의 오른쪽 자식은 오른쪽 서브트리의 왼쪽 자식과 같아야 함
package main
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func isMirror(part1, part2 *TreeNode) bool {
if part1 == nil && part2 == nil {
return true
}
if part1 == nil || part2 == nil {
return false
}
if part1.Val != part2.Val {
return false
}
return isMirror(part1.Left, part2.Right) && isMirror(part1.Right, part2.Left)
}
func isSymmetric(root *TreeNode) bool {
if root == nil {
return true
}
return isMirror(root.Left, root.Right)
}
func main() {
}
기준 코드에서 Left, Right가 같은 지 재귀적으로 확인하는 방식만 추가하여 문제를 풀었음
'leetcode , 백준' 카테고리의 다른 글
[분할정복, 재귀] LeetCode 108번 문제 학습 (0) | 2025.03.19 |
---|---|
[DFS - 재귀, 후위 순회] LeetCode 104번 문제 학습 (0) | 2025.03.19 |
[DFS - 재귀] LeetCode 100번 문제 학습 (0) | 2025.03.19 |
94. Binary Tree Inorder Traversal (0) | 2025.03.19 |
[DFS-중위 순회] LeetCode 94번 문제 학습 (0) | 2025.03.19 |