[Binary Tree - DFS, Easy] Leaf-Similar Trees

송재호·2025년 3월 28일
0

https://leetcode.com/problems/leaf-similar-trees/description/?envType=study-plan-v2&envId=leetcode-75

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;
    }
}
profile
식지 않는 감자

0개의 댓글