😎풀이

  1. 너비 우선 탐색
    1-1. x, y값에 해당하는 노드 탐색
    1-2. 깊이 및 부모 노드 정보 저장
  2. x, y에 해당하는 노드가 탐색되지 않았다면 false 반환
  3. 부모가 같은 노드라면 false 반환
  4. 깊이가 서로 다르다면 false 반환
  5. 모든 조건을 충족하는 경우 true 반환
type InfoType = {
    parent: TreeNode | null, 
    depth: number
}

function isCousins(root: TreeNode | null, x: number, y: number): boolean {
    let xInfo: InfoType | null = null
    let yInfo: InfoType | null = null
    const queue = [{ node: root, depth: 0, parent: null }]
    while(queue.length) {
        const { node, depth, parent } = queue.shift()
        if(node.val === x) xInfo = { parent, depth }
        else if(node.val === y) yInfo = { parent, depth }
        if(node.left) queue.push({ node: node.left, depth: depth + 1, parent: node })
        if(node.right) queue.push({ node: node.right, depth: depth + 1, parent: node })
    }
    if(!xInfo || !yInfo) return false
    if(xInfo.parent === yInfo.parent) return false
    if(xInfo.depth !== yInfo.depth) return false
    return true
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글