# [LeetCode] 538. Convert BST to Greater Tree

## Problem

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``````

## Solution - Recursion

``````class Solution {
int sum = 0;
public TreeNode convertBST(TreeNode root) {
if (root == null) return null;
convertBST(root.right);
root.val += sum;
sum = root.val;
convertBST(root.left);
return root;
}
}``````

## Solution - Iteration

``````class Solution {
public TreeNode convertBST(TreeNode root) {
if (root == null) return null;
int sum = 0;
Deque<TreeNode> stack = new ArrayDeque<>();
TreeNode cur = root;
while (cur != null || !stack.isEmpty()) {
while (cur != null) {
stack.push(cur);
cur = cur.right;
}
cur = stack.pop();
cur.val += sum;
sum = cur.val;
cur = cur.left;
}
return root;
}
}
``````