99클럽 코테 스터디 14일차 TIL + 재귀 호출

Boxx-Ham·2024년 6월 2일
0

99TIL

목록 보기
6/19
post-thumbnail

1. 오늘의 문제

Invert Binary Tree

2. 문제 분석

  • root : 이진 트리
  • 리턴 값 : root 트리를 뒤집은 트리
  • 노드 개수 : 0 이상 100 이하
  • 노드의 값 : -100 이상 100 이하
  • 입출력 예시
    • Input : root = [4, 2, 7, 1, 3, 6, 9]
    • Output : [4, 7, 2, 9, 6, 3, 1]

* Input : root = [2, 1, 3] * Output : [2, 3, 1]
* Input : root = [] * Output : []

3. 문제 풀이

  1. 이진 트리의 서브 트리들까지 뒤집어야 하기에 재귀 호출 이용
  2. root가 null이면 return null
  3. root의 왼쪽 서브 트리랑 오른쪽 서브 트리를 바꿔야 함
  4. 그 밑의 서브 트리도 바꿔야 함

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 TreeNode invertTree(TreeNode root) {
        if (root == null) {
            return null;
        }

        // 노드 변경
        TreeNode tempTree = root.left;
        root.left = root.right;
        root.right = tempTree;
        
        // 왼쪽과 오른쪽 서브트리도 변경
        invertTree(root.left);
        invertTree(root.right);

        return root;
    }
}

5. 오늘의 회고

  • 근데 오늘 재귀 호출은 조금 어려웠다. 조건이 없어서 그냥 하면 되는 건데 어떤 조건에서 왼쪽하고, 어떤 조건에서 오른쪽 하는지 헷갈려서 헤매다가.. 그냥 해보면 어떨까 싶어서 했더니 됐다.. ㅋㅋ
  • 노드 변경 부분에서 root의 왼쪽 자식을 left로, root의 오른쪽 자식을 right 변수로 바꿔서 가독성을 높이려고 했는데 복사본을 변경한거라 결론적으로 root.left, root.right는 변경되지 않았다. 그래서 당황했다..
  • 그래서 left를 root.left로 직접 지정했다. 그랬더니 풀렸다..ㅋㅋ
  • 오늘 문제는 조건없는데 조건 찾으려고 애쓰다가 시간이 많이 지나갔다..ㅋㅋ 내일은 더 잘해야지!

#99클럽 #코딩테스트 준비 #개발자 취업 #항해99 #TIL

0개의 댓글