[LeetCode] 117. Populating Next Right Pointers in Each Node II

Chobby·2025년 1월 8일
1

LeetCode

목록 보기
150/194

😎풀이

같은 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
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글