파이썬 알고리즘 인터뷰 51번(리트코드 1038번) Binary Search Tree to Greater Sum Tree
https://leetcode.com/problems/binary-search-tree-to-greater-sum-tree/
# 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 bstToGst(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
curr = 0
def helper(root):
nonlocal curr
if not root:
return
helper(root.right)
root.val, curr = root.val + curr, curr + root.val
helper(root.left)
helper(root)
return root
# 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:
val = 0
def bstToGst(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
if root:
self.bstToGst(root.right)
self.val += root.val
root.val = self.val
self.bstToGst(root.left)
return root
# 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 bstToGst(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
def helper(root, curr):
if not root:
return curr
root.val += helper(root.right, curr)
return helper(root.left, root.val)
helper(root, 0)
return root