같은 depth간의 노드들을 이어줘야 하는 문제이다.
같은 depth를 탐색한다는 것은 너비를 우선적으로 탐색한다는 의미이므로 bfs 풀이를 적용하였음
순차적으로 다음 노드를 순회하며 탐색한다.
/**
* Definition for _Node.
* class _Node {
* val: number
* left: _Node | null
* right: _Node | null
* next: _Node | null
*
* constructor(val?: number, left?: _Node, right?: _Node, next?: _Node) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* this.next = (next===undefined ? null : next)
* }
* }
*/
function connect(root: _Node | null): _Node | null {
if(!root) return null
// 하나의 depth 같은 배열에 담긴 이중배열 queue 선언
const queue = [[root]]
while(queue.length) {
// 현재의 depth 모두 검사
const curNodes = queue.pop()
const nextNodes = []
for(let i = 0; i < curNodes.length; i++) {
const current = curNodes[i]
const next = curNodes[i + 1]
// 현재 노드와 다음 노드를 이어줌
if(next) current.next = next
// 다음 depth 노드를 옮김
if(current.left) nextNodes.push(current.left)
if(current.right) nextNodes.push(current.right)
}
// 다음 depth가 존재한다면 queue에 입력
if(nextNodes.length) queue.push(nextNodes)
}
return root
};