IT/자기계발 ( Leetcode )

2021-02-09] Convert BST to Greater Tree

Bell_bear 2021. 2. 9. 22:33
반응형

오늘의 문제:

leetcode.com/explore/featured/card/february-leetcoding-challenge-2021/585/week-2-february-8th-february-14th/3634/

 

이번에도 Tree 문제이다. 

 

예시를 보면서 문제를 이해해 보자.

 

 

주어지는 BST root에서 가장 오른쪽의 값 부터 시작해서,  값을 더해 커지는 Tree를 만드는 것이 목표이다.

 

예시처럼 맨 오른쪽의 leaf node의 값인 8은 그대로고, 그 위의 root 7 -> 8+7= 15로 치환 되며,

 

계속 방문하며 파란색의 값으로 변경하고 이를 반환하면 된다.

 

우선 BFS,DFS 문제인 것을 알 수 있고, 이를 어떤 순서로 방문해야 하는지가 관건이다.

 

node의 오른쪽 -> 현재 node -> node의 왼쪽 순서로 방문하여 값을 변경 해주면 되겠다.

 

아래 코드를 보며 이해해보자.

 

# 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
def BFS(node: TreeNode):
    if node == None: # Node가 비어있다면 끝
        return
    global bval
    if node.right: # 오른쪽 -> 중간 -> 왼쪽 순서로 방문
        BFS(node.right)
    bval=bval+node.val # 가장 오른쪽부터 시작 node의 값을 더해주며, node.val에 저장
    node.val=bval
    if node.left:
        BFS(node.left)

class Solution:    
    def bstToGst(self, root: TreeNode) -> TreeNode:
        ans=root # 주어지는 값을 변경할 복사 Tree
        global bval
        bval=0 # 이전 값을 더하여 저장할 변수 
        BFS(ans)
        return ans
반응형