아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

잘못 작성된 DFS

면접 대비

시간 제한1초메모리 제한1024 MB

요약
왼쪽 자식으로 두 번 재귀하는 버그가 있는 전위 DFS에서, 방문 횟수를 모두 세지 않고 K번째로 방문하는 노드를 찾는다.
난이도

보통10점 중 6점

유형
트리, DFS, 재귀, 수학
정답자
아직 제출이 없습니다

문제

Yunee는 자료구조 과제를 하고 있다. Yunee는 이진 트리를 전위 순회하는 함수 DFS를 작성했다. 그런데 실수로 왼쪽 부분 트리에 DFS를 두 번 재귀 호출하는 코드를 작성하고 말았다.

function DFS(node v):
    visit v
    if v → left exists:
        DFS(v → left)
        DFS(v → left)
    if v → right exists:
        DFS(v → right)

Yunee의 DFS 의사 코드는 위와 같다. 이제 다음 예시를 보자.

위 트리를 전위 순회하면 노드 1,2,3,4,51, 2, 3, 4, 5가 순서대로 방문된다. 그러나 Yunee의 DFS는 노드 1,2,3,3,4,2,3,3,4,51, 2, 3, 3, 4, 2, 3, 3, 4, 5를 순서대로 방문한다.

이진 트리가 주어졌을 때, Yunee의 DFS가 방문하는 KK번째 노드를 구하시오. KK는 전체 방문 횟수보다 크지 않음이 보장된다. 노드는 11부터 NN까지 번호가 붙어 있고, 루트 노드는 항상 11번 노드이다.

입력

첫 번째 줄에 두 정수 NN과 KK가 주어진다. (1≤N≤105,1≤K≤1018)(1\leq N \leq 10^5, 1\leq K \leq 10^{18}) NN은 트리의 노드 수를 나타낸다. KK는 전체 방문 횟수보다 크지 않다.

다음 NN개의 줄은 트리를 나타낸다. ii번째 줄에 두 정수 l_il\_i와 r_ir\_i가 주어진다. (0≤l_i,r_i≤N)(0 \leq l\_i, r\_i \leq N) l_il\_i는 노드 ii의 왼쪽 자식, r_ir\_i는 노드 ii의 오른쪽 자식을 나타낸다. 해당하는 자식이 없으면 l_il\_i 또는 r_ir\_i 대신 00이 주어진다.

루트 노드는 항상 11번 노드이다.

출력

Yunee의 DFS가 방문하는 KK번째 노드를 출력한다.

예제1

  1. 예제 1

    입력
    5 9
    2 5
    3 4
    0 0
    0 0
    0 0
    
    예상 출력
    4