left 우선 탐색, 후에 right 탐색하는 방식으로 재귀든 스택이든 순회를 하면 되고
각각 얻어진 결과를 가변길이 자료구조에 넣어두면 될 것 같다 (얼마나 큰지 모르니까 - 구해도 되지만 구하면 그만큼 순회 손해)
ArrayList를 사용할 것이고, equals()
를 사용하면 원소의 순서까지 동일하게 체크하도록 오버라이드 되어 있으므로 간단
만약 순서 상관없이 비교하려면 Set사용해도 되고 아니면 containsAll()
해도 될 듯
class Solution {
public boolean leafSimilar(TreeNode root1, TreeNode root2) {
List<Integer> leaf1 = new ArrayList<>();
List<Integer> leaf2 = new ArrayList<>();
dfs(root1, leaf1);
dfs(root2, leaf2);
return leaf1.equals(leaf2);
}
public void dfs(TreeNode node, List<Integer> leafList) {
if (node == null) {
return;
}
// 리프노드냐?
if (node.left == null && node.right == null) {
leafList.add(node.val);
return;
}
dfs(node.left, leafList);
dfs(node.right, leafList);
return;
}
}