[0, 100]
.104 <= Node.val <= 104
오랜만에 트리 탐색 문제가 나왔다. 기억을 되살리겸 순회를 통해 두 트리를 비교하는 쪽으로 방향을 잡았다. 한가지 주의할 점이 있다면, 무작정 순회를 통해 비교를 할경우 [1, 1, null]과 [1, null, 1]을 구분하지 못한다. 때문에, 각 노드의 depth나 level을 붙여줘야 한다 → Sol1
정석적인 풀이는 재귀를 통해 각 노드를 하나씩 비교하는 것이다 → Sol2
전위 순회
각 노드를 전위 순회하며 문자열 리턴
(이때, ‘level : 노드 값’)
class Solution {
fun isSameTree(p: TreeNode?, q: TreeNode?): Boolean {
if (p == null && q == null) return true
if (p == null || q == null) return false
return preOrder(p) == preOrder(q)
}
fun preOrder(p: TreeNode?, level: Int = 1): String {
if (p == null) return ""
return preOrder(p.left, level+1) + level.toString() + ":" + p.`val`.toString() + "," + preOrder(p.right, level+1)
}
}
시간 복잡도: 트리 순회 = n
재귀
재귀
class Solution {
fun isSameTree(p: TreeNode?, q: TreeNode?): Boolean {
if (p == null && q == null) return true
if (p == null || q == null || p.`val` != q.`val`) return false
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right)
}
}
시간 복잡도: 트리 순회 = n