[트리] 트리의 리프노드 개수 구하기

2023. 9. 22. 22:18·Computer Science/Algorithms

https://www.acmicpc.net/problem/1068

 

1068번: 트리

첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다

www.acmicpc.net

 

import sys
si = lambda : sys.stdin.readline().rstrip()
l = lambda : list(map(int, si().split()))

def dfs(root) : # x의 subtree에 대해 leaf[x]를 계산해주는 함수
    if not child[root] : # 아무것도 없다면 리프노드
        leaf[root] = 1

    for node in child[root] : # 자식이 존재한다면
        dfs(node) # 탐색 수행
        leaf[root] += leaf[node] # 탐색하고 나와서 리프노드의 수만큼 저장

n = int(si())
child = [[] for _ in range(n)]
leaf = [0 for _ in range(n)]
lst = l()
root = -1
for i in range(len(lst)) :
    if lst[i] == -1 :
        root = i
        continue
    child[lst[i]].append(i)
erased = int(si())

for i in range(n) : # remove할 노드를 찾아서 제거 => 탐색자체를 못하게 함.
    if erased in child[i] :
        child[i].remove(erased)

if root != erased : # 만약 타겟이 root노드가 아니라면 탐색을 수행
    dfs(root)

print(leaf[root]) # 타겟이 root라면 해당 조건을 넘어가서 0이 출력될 것
'Computer Science/Algorithms' 카테고리의 다른 글
  • [수학] 소수 구하기
  • [수학] - 최소공배수, 최대공약수 구하기
  • [트리] 트리의 지름 구하기
  • [링크드 리스트] 링크드 리스트 뒤집기
kimdozzi
kimdozzi
끝까지 포기하지 않으면, 내가 다 이겨!
  • kimdozzi
    도브로
    kimdozzi
  • 전체
    오늘
    어제
    • 분류 전체보기 (132)
      • Problem Solving (49)
        • Baekjoon (29)
        • Programmers (0)
        • LeetCode (17)
        • 삼성 유형 (2)
      • Computer Science (27)
        • Operating System (2)
        • Algorithms (13)
        • Network (6)
        • DataBase (6)
      • Backend (33)
        • JavaScript (0)
        • TypeScript (6)
        • Java (7)
        • Spring Boot (7)
        • Spring Security (6)
        • JPA (2)
        • Mybatis (1)
        • Junit5 (1)
        • Redis (3)
      • DevOps (14)
        • Git, Github (5)
        • docker (4)
        • AWS (3)
        • nginx (2)
      • etc (6)
        • IntelliJ (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 티스토리
    • 설정
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    인터페이스
    python
    오프라인 쿼리
    CORS
    docker image
    파이썬
    segment tree
    PrefixSum
    점 업데이트
    도커
    세그먼트 트리
    컨테이너
    S3
    구간합
    온라인 쿼리
    TypeScript
    누적합
    인덱서블 타입
    Bucket
    imos법
    알고리즘
    docker
    AWS
    백준
    interface
    인덱스 시그니처
    타입스크립트
    티스토리챌린지
    구간 업데이트
    삼성기출
    오블완
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
kimdozzi
[트리] 트리의 리프노드 개수 구하기
상단으로

티스토리툴바