새소식

PS/LeetCode

2583. Kth Largest Sum in a Binary Tree

  • -

Problem : https://leetcode.com/problems/kth-largest-sum-in-a-binary-tree

 

Difficulty : Medium

 

Status : Solved

 

Time : 00:04:22

 


 

문제 설명

 

더보기

이진 트리의 루트 root와 양의 정수 k가 주어진다.

 

트리의 레벨합은 같은 레벨에 있는 모든 노드의 값의 합을 의미한다.

 

k번째로 큰 레벨합을 구하여라. 트리 레벨이 k보다 적다면 -1을 반환하라.

 

두 노드는 루트 노드와 같은 거리에 있다면 같은 레벨이다.


 

풀이

 

여러 방법이 있겠지만, 나는 BFS를 먼저 시도했다.

 

트리에서 BFS를 수행하면, 한 사이클을 돌 때마다 한 레벨의 노드를 전부 방문할 수 있다. 즉 O(N) 시간복잡도 내에 추가적인 알고리즘 없이 레벨순으로 모든 노드를 방문할 수 있다. 따라서 레벨합을 매우 쉽게 구할 수 있고, 이 레벨합 중 K번째 레벨합을 구하면 된다(이는 보통 O(NlogN) 시간복잡도가 걸릴 것이다)

 

풀이 코드

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def kthLargestLevelSum(self, root: Optional[TreeNode], k: int) -> int:
        nums = []
        curr = [root]

        while curr :
            res = 0
            tmp = []
            for c in curr :
                res += c.val
                if c.left is not None :
                    tmp.append(c.left)
                if c.right is not None :
                    tmp.append(c.right)
            heappush(nums, -res)
            curr = tmp

        if len(nums) < k :
            return -1
        
        for _ in range(k-1) :
            heappop(nums)
        return -heappop(nums)

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.