Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus sum of all keys greater than the original key in BST.
Example:
Input: The root of a Binary Search Tree like this:
5
/
2 13
Output: The root of a Greater Tree like this:
18
/
20 13
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def convertBST(self, root):
"""
:type root: TreeNode
:rtype: TreeNode
"""
a = []
if root is None:
return root
def inorder(root):
if root.left:
inorder(root.left)
a.append(root.val)
if root.right:
inorder(root.right)
inorder(root)
for i in range(len(a)-2,-1,-1):
a[i] += a[i+1]
pos = 0
def change(root):
nonlocal pos
if root.left:
change(root.left)
root.val = a[pos]
pos += 1
if root.right:
change(root.right)
change(root)
return root