본문 바로가기
카테고리 없음

[Leetcode/C#] 199. Binary Tree Right Side View

by 질서정연_ 2024. 8. 17.

 

문제링크 

https://leetcode.com/problems/binary-tree-right-side-view/?envType=study-plan-v2&envId=top-interview-150

 

 

637. Average of Levels in Binary Tree 랑 비슷한 개념이라 금방 풀 수 있었다. 

637번 문제와 동일한 개념으로 풀면 되는데

이 문제는 right side view 에서 봤을때 보이는 node 를 return 하면 되는 문제라서

queue.Count 를 한 후 반복문 안에서 dequeue 해주고 마지막 요소일때 그 node 의 값을 result List 에 Add 해줬다.

 

기억하면 좋을 것

 

public class Solution {
    public IList<int> RightSideView(TreeNode root) {
        Queue<TreeNode> queue = new Queue<TreeNode>();
        queue.Enqueue(root);
        List<int> result = new List<int>();

        while(queue.Count > 0)
        {
            int cnt = queue.Count;
            
            for(int i = 0 ; i<cnt ; i++)
            {
                TreeNode tmpNode = queue.Dequeue();
                if (i == cnt-1) result.Add(tmpNode.val);
                if(tmpNode.left != null) queue.Enqueue(tmpNode.left);
                if(tmpNode.right != null) queue.Enqueue(tmpNode.right);
            }
        }

        return result;
    }
}

 

맞게 푼 것 같은데 처음에 

Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object. At Solution.RightSideView(TreeNode root) At __DriverSolution__.__Helper__(TreeNode param_1) At __Driver__.Main(String[] args) 

에러가 났다.

왜일까 생각해보니 문제 설명에 root 가 null 인 경우가 테스트 케이스에 포함되어있었다. 

 

그래서 root 가 null 이 아닐때만 queue에 추가해주는 로직을 추가하니 통과됐다. 

문제를 잘 읽는게 제일 중요한데 너무 성급하게 머릿속에서 떠오른 생각대로 풀어버린 것 같다. 

문제를 잘 읽자 !

소감

문제를 잘 읽자 !!

 

 

해결 코드

public class Solution {
    public IList<int> RightSideView(TreeNode root) {
        Queue<TreeNode> queue = new Queue<TreeNode>();
        if(root != null) queue.Enqueue(root);
        List<int> result = new List<int>();

        while(queue.Count > 0)
        {
            int cnt = queue.Count;
            
            for(int i = 0 ; i<cnt ; i++)
            {
                TreeNode tmpNode = queue.Dequeue();
                if (i == cnt-1) result.Add(tmpNode.val);
                if(tmpNode.left != null) queue.Enqueue(tmpNode.left);
                if(tmpNode.right != null) queue.Enqueue(tmpNode.right);
            }
        }

        return result;
    }
}
 
 
 
 

Submission Detail

 

댓글