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

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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바