[LeetCode#] Invert Binary Tree

2024. 9. 22. 01:59·Algorithm/문제풀이

 

❒ Description


날짜 2024.09.22 (토)
레벨 Easy
제목 Invert Binary Tree
링크 https://leetcode.com/problems/invert-binary-tree/
자료구조 그래프
알고리즘 X
시간 복잡도 O(n)

 

이번 문제는 재귀구조를 연습할 수 있는 좋은 문제였다. 다양한 풀이 방법을 통해 재귀에 익숙해지자.

 

 

 

 

 

❒ Solution


1. 새로운 노드 생성 DFS

public invertTree(TreeNode root) {
    if (root == null) return null;
    
    // 1. 새로운 노드 생성
    TreeNode inverted = new TreeNod(root.val);
    
    // 2. 새로운 노드의 left, right 설정
    inverted.left = invert(root.right);
    inverted.right = invert(root.left);
    
    // 3. 새로운 노드 반환
    return inverted;
}

 

 

2. 일반 재귀구조 DFS

public TreeNode invertTree(TreeNode root) {
    if (root != null) {
        // 임시 변수(temp)를 사용해서 좌우 교체
        TreeNode temp = root.left;
        root.left = root.right;
        root.right = temp;
		
        invertTree(root.left); // 왼쪽 자식 노드 DFS
        invertTree(root.right);// 오른쪽 자식 노드 DFS 
    }
    return root;
}

 

 

3. 후위 순위 재귀구조 DFS

public TreeNode invertTree(TreeNode root) {
    if (root != null) {		
        invertTree(root.left);
        invertTree(root.right);

        TreeNode temp = root.left;
        root.left = root.right;
        root.right = temp;
    }
    return root;
}

 

 

4. 반복구조 DFS

public TreeNode invertTree(TreeNode root) {
    if (root == null) return null;
    Deque<TreeNode> stack = new ArrayDeque<>();
    stack.push(root);
    
    while (!stack.isEmpty()) {
        TreeNode node = stack.pop();
        TreeNode temp = node.left;
        node.left = node.right;
        node.right = temp;
        
        if (node.hasLeft()) {
            stack.push(node.left);
        }
        if (node.hasRight() {
            stack.push(node.right);
        }
    }
    return root;
}

 

 

5. 반복구조 BFS

public TreeNode invertTree(TreeNode root) {
    if (root == null) return null;
    Queue<TreeNode> q = new LinkedList<>();
    q.offer(root);
    
    while (!q.isEmpty()) {
        TreeNode node = q.remove();
        TreeNode temp = node.left;
        node.left = node.right;
        node.right = temp;
        
        if (node.hasLeft()) {
            q.offer(node.left);
        }
        if (node.hasRight() {
            q.offer(node.right);
        }
    }
    return root;
}

 

 

 

 

 

 


 

'Algorithm > 문제풀이' 카테고리의 다른 글

[LeetCode#310] Minimum Height Trees  (0) 2024.09.24
[LeetCode#110] Balanced Binary Tree  (0) 2024.09.23
[LeetCode#687] Longest Univalue Path  (0) 2024.09.21
[LeetCode#455] Assign Cookies  (0) 2024.09.19
[LeetCode#134] Gas Station  (0) 2024.09.18
'Algorithm/문제풀이' 카테고리의 다른 글
  • [LeetCode#310] Minimum Height Trees
  • [LeetCode#110] Balanced Binary Tree
  • [LeetCode#687] Longest Univalue Path
  • [LeetCode#455] Assign Cookies
gilbert9172
gilbert9172
gilbert9172 님의 블로그 입니다.
  • gilbert9172
    バックエンド
    gilbert9172
  • 전체
    오늘
    어제
    • All Categories (207)
      • 우테코 7기 (21)
        • 1주차 (8)
        • 2주차 (5)
        • 3주차 (6)
      • Langauge (6)
        • Java (3)
        • Kotlin (3)
      • Back-End (13)
        • SpringBoot (1)
        • Trouble Shooting (0)
        • Setup & Configuration (1)
        • SQL (3)
        • Redis (8)
      • Architecture (6)
        • Multi Module (1)
        • DDD (5)
      • CS (30)
        • Data Structure (6)
        • Operating System (0)
        • Network (12)
        • Database (10)
        • Design Pattern (2)
      • Algorithm (78)
        • 내용 정리 (18)
        • 문제풀이 (60)
      • DevOps (6)
        • AWS (5)
        • Git (1)
      • Front-End (1)
        • Trouble Shooting (1)
      • Project (6)
        • 페이스콕 (6)
      • Book (39)
        • 친절한 SQL 튜닝 (9)
        • 데이터 중심 애플리케이션 설계 (14)
        • 이벤트 기반 마이크로서비스 구축 (6)
        • Spring Batch docs (10)
        • Quartz docs (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    sliding-window
    Two-Pointer
    binarysearch
    오블완
    부분단조성
    greedy
    Back-Tracking
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
gilbert9172
[LeetCode#] Invert Binary Tree
상단으로

티스토리툴바