문제링크
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
댓글