개발 공부/TIL(Today I Learned)

99클럽 코테 스터디 14일차 TIL Symmetric Tree

애해 2024. 8. 5. 00:31
728x90

 

# 오늘의 학습 키워드 

이분탐색(이진탐색)

 

# 오늘의 문제 

https://leetcode.com/problems/symmetric-tree/description/

Given the root of a binary tree, check whether it is a mirror of itself (i.e., symmetric around its center).

 

# 나의 풀이방식 

오늘의 문제는 root 노드를 기준으로 좌우대칭 여부를 return하는 문제였다. 

1. 대칭을 확인하기 위한 재귀함수 구현 

2. 노드값이 null인 경우 처리 

- 비교하는 값이 둘다 null이면 true, 한쪽만 null이면 false 반환

3. 노드가 다른 경우 대칭이 아니므로 false 반환 

4. 노드가 같은 경우 재귀함수 호출  

/**
 * 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 isSymmetric(TreeNode root) {
        return compareTo(root.left, root.right);
    }

    private boolean compareTo(TreeNode left, TreeNode right){

        // null 처리
        if(left == null && right == null){
            return true;
        }else if(left == null || right == null) { // 무조건 false인 경우
            return false; 
        }

        // 노드를 비교해서 동일할 경우 재귀함수로 반복 
        if(left.val == right.val){
            return compareTo(left.left, right.right) && compareTo(left.right, right.left);
        }else{ // 노드가 다를 경우 false 반환 
            return false;
        }

    }

}

 

# 오늘의 회고 

1depth까지는 단순 값비교라 어렵지 않았지만 2depth부터는 대칭으로 비교해야했는데 재귀함수 쓰는건 알겠지만 어떻게 구현해야할지 한참 고민했다. 

이진탐색 대칭 문제나오면 바로 풀수있는 그날이 오기를..... ^.ㅜ

반응형