본문 바로가기
Beakjoon&프로그래머스/Java

[LeetCode/Java] Leaf-Similar Trees

by 현장 2025. 12. 31.

-Code

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public boolean leafSimilar(TreeNode root1, TreeNode root2) {
        // 리프 노드를 저장하기 위한 리스트
        ArrayList<Integer> treeLeafs1 = new ArrayList<Integer>();
        ArrayList<Integer> treeLeafs2 = new ArrayList<Integer>();
        // 두 root의 리프 노드들 구하기
        getLeafs(root1, treeLeafs1);
        getLeafs(root2, treeLeafs2);
        
        return treeLeafs1.equals(treeLeafs2);
    }

    private static void getLeafs(TreeNode root, ArrayList leafs) {
        // root가 null인경우 빠져나옴
        if (root == null) {
            return;
        }
        // 다음 왼쪽과 오른쪽 노드가 없는 경우 리프 노드임으로 저장
        if (root.left == null && root.right == null) {
            leafs.add(root.val);
            return;
        }
        // 완쪽과 오른쪽으로 이동하면서 검사
        getLeafs(root.left, leafs);
        getLeafs(root.right, leafs);
    }
}

리프 노드를 어떻게 바교하나 생각했을 때 리프 노드만 담아서 비교하라는 힌트를 보고 구현했습니다. 하지만 ArrayList를 변수로 받으면 return을 따로 ArrayList로 안 해도 저장되는 것과 root가 아예 null인 경우 조건문을 빼먹어서 해당 부분을 해결하니 통과 됐습니다.