199. Binary Tree Right Side View

2025. 10. 9. 18:16·Coding Test/LeetCode

난이도: 중간 (Medium)

링크: LeetCode 199

풀이날짜: 2025/10/03(못품), 2025/10/09(품)

 


1. 문제 이해

 

주어진 이진 트리에서, 오른쪽 측면에서 보이는 노드들의 값을 반환해야 하는 문제로,

각 레벨(level)마다 가장 오른쪽에 위치한 노드만 결과값으로 포함시켜야 한다.


2. 접근 방식 및 자료 구조

나는 DFS 방식으로 풀었으나, 문제 의도에는 BFS 방식이 더 적절해 보인다.

 

방법 1: DFS (오른쪽 우선 탐색) 

  • 깊이(Depth)를 추적하면서 오른쪽 자식부터 탐색한다.
  • 각 깊이에서 처음 방문한 노드가 그 레벨의 가장 오른쪽 노드가 된다.
  • depth === result.length 조건을 통해 해당 깊이에서 아직 추가되지 않은 노드만 결과에 넣는다.
/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
function rightSideView(root) {
  const result = [];

  function dfs(node, depth) {
    if (!node) return;

    // 해당 깊이에서 처음 방문한 노드라면 오른쪽 노드일 것이다.
    if (depth === result.length) {
      result.push(node.val);
    }

    // 오른쪽 → 왼쪽 순으로 탐색
    dfs(node.right, depth + 1);
    dfs(node.left, depth + 1);
  }

  dfs(root, 0);
  return result;
}

 

시간 복잡도: O(n) — 모든 노드를 한 번씩 방문

공간 복잡도: O(h) — 재귀 호출 스택 (h는 트리의 높이)

 


방법 2: BFS (레벨 탐색)

  • 각 레벨의 노드를 모두 순회하되, 마지막 노드(i === len - 1) 의 값만 결과에 추가한다.
  • 큐(Queue)를 사용해 레벨 단위로 탐색한다.
/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var rightSideView = function(root) {
  if (!root) return [];
  
  const result = [];
  const queue = [root];

  while (queue.length > 0) {    
    const len = queue.length;

    for (let i = 0; i < len; i++) {
      const node = queue.shift();

      // 해당 레벨의 마지막 노드만 추가
      if (i === len - 1) result.push(node.val);

      // 왼쪽, 오른쪽 순으로 추가 (BFS 순서 유지)
      if (node.left) queue.push(node.left);
      if (node.right) queue.push(node.right);
    }
  }

  return result;
};

 

시간 복잡도: O(n) — 모든 노드를 한 번씩 방문

공간 복잡도: O(n) — 큐에 최대로 레벨 단위 노드들이 저장될 수 있음

 


3. 핵심 포인트 요약

구분 DFS BFS
탐색 순서 오른쪽 → 왼쪽 레벨별 (좌 → 우)
추가 조건 depth === result.length i === len - 1
장점 코드 간결, 재귀적 사고 명시적 구조, 디버깅 용이
공간 복잡도 O(h) O(n)
공통점 각 레벨의 “오른쪽 끝” 노드만 결과에 추가

 


✅ 정리

이 문제는 두 가지 모두 유효한 접근법이 있으며,

  • DFS는 “오른쪽부터 깊게 들어가며 한 레벨의 첫 노드만 기록”
  • BFS는 “한 레벨을 모두 보고 마지막 노드만 기록”

한다는 점이 핵심이다.

'Coding Test > LeetCode' 카테고리의 다른 글

637. Average of Levels in Binary Tree  (0) 2025.10.09
'Coding Test/LeetCode' 카테고리의 다른 글
  • 637. Average of Levels in Binary Tree
JTB
JTB
웹/앱 개발 정보를 공유하고 있습니다.
  • JTB
    JTechBlog
    JTB
  • 전체
    오늘
    어제
    • All About Programming;) N
      • Computer Science
        • Terminology and Concepts
        • Network
        • Operating System
        • Database
        • Data Structure
      • Frontend
        • Javascript Essentials
        • Perfomance Optimization
        • JS Patterns
        • Next.js
        • Flutter
      • Backend
        • Node.js
      • DevOps
        • Docker & Kubernetes
      • Coding Test N
        • LeetCode N
        • Programmers
      • Tech Books & Lectures
        • Javascript_Modern JS Deep d..
        • Network_IT 엔지니어를 위한 네트워크 입문
      • Projects
        • PolyLingo_2025
        • Build Your Body_2024
        • JStargram_2021
        • Covid19 Tracker_2021
        • JPortfolio_2021
      • BootCamp_Codestates
        • TIL
        • TILookCloser
        • Pre Tech Blog
        • IM Tech Blog
        • Daily Issues and DeBugging
        • First Project
        • Final Project
        • Sprint Review
        • Good to Know
        • Socrative Review
        • HTML &amp; CSS
  • 블로그 메뉴

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

    • 글쓰기
    • 관리
  • 공지사항

  • 인기 글

  • 태그

    indie hacker
    VoiceJournal
    자바스크립트 딥다이브
    Network
    CPU scheduling algorithm
    프론트엔드 성능 최적화 가이드
    How memory manage data
    Binary Tree BFS
    Threads and Multithreading
    JavaScript
    이벤트
    mobile app
    need a database
    Shared resources
    js pattern
    TCP/IP
    모던 자바스크립트 Deep Dive
    스코프
    leetcode
    DOM
    database
    Time complexity and Space complexity
    structure of os
    polylingo
    testing
    Data Structure
    딥다이브
    Operating System
    커리어
    자바스크립트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
JTB
199. Binary Tree Right Side View
상단으로

티스토리툴바