All Articles

Binary Tree Level Order Traversal

Binary Tree Level Order Traversal II

문제 설명

Binary Tree가 인자로 주어지고 tree를 순회하며 가장 마지막 노드부터 단계적으로 배열에 값을 저장하는 것이다.

문제 예시

[input]

    3
   / \
  9  20
    /  \
   15   7

[output]

[
  [15, 7],
  [9, 20],
  [3],
]

풀이 1 - BFS (non-recursive)

var levelOrderBottom = function(root) {
   if (!root) return []
   const arr = [root]; 
   const result = [];
   while (arr.length) {
       const size = arr.length;
       const values = []
       for (let i = 0; i < size; i++) {
           const node = arr.shift()
           values.push(node.val)
           if (node.left) arr.push(node.left)
           if (node.right) arr.push(node.right)
       }
       result.unshift(values)
   }
   return result
};

풀이2 - BFS (Recursive)

var levelOrderBottom = function(root) {
    var output = [];
    bfs(root, 0, output)
    return output.reverse();
};
    
var bfs = function(node, level, output) {
    if (!node) return;
    if (!output[level]) output[level] = [];
    output[level].push(node.val);
	
    bfs(node.left, level + 1, output);
    bfs(node.right, level + 1, output);
}

핵심부분

예전에 알고리즘을 풀때는 BFS를 정확하게 이해하지 못했다. 숙련도가 조금씩 늘어나면서 Tree의 BFS 풀이법을 보면서 Queue를 활용해야 한다는 점, 그리고 어떻게 순회해야하는지에 대해 이해하고 개념이 쌓여가는 것 같다. 물론 아직 문제조차 풀지 못했지만, 계속 풀면서 키포인트를 찾는 연습이 필요하다고 생각한다.

도움받은 문서

leetcode

공부한 내용을 정리하는 공간으로 학습 중 습득한 내용이 정확하지 않은 정보를 포함할 수 있어 추후 발견시 수정하도록 하겠습니다.