website/content.en/ChapterFour/0500~0599/0538.Convert-BST-to-Greater-Tree.md
Given the root of 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.
As a reminder, a binary search tree is a tree that satisfies these constraints:
Note: This question is the same as 1038: https://leetcode.com/problems/binary-search-tree-to-greater-sum-tree/
Example 1:
Input: root = [4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]
Output: [30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]
Example 2:
Input: root = [0,null,1]
Output: [1,null,1]
Example 3:
Input: root = [1,0,2]
Output: [3,3,2]
Example 4:
Input: root = [3,2,4,1]
Output: [7,9,4,10]
Constraints:
[0, 104].104 <= Node.val <= 104root is guaranteed to be a valid binary search tree.Given the root node of a binary search tree, where all node values are distinct, convert it to a Greater Sum Tree such that the new value of each node node is equal to the sum of all values in the original tree that are greater than or equal to node.val.
As a reminder, a binary search tree satisfies the following constraints:
package leetcode
import (
"github.com/halfrost/leetcode-go/structures"
)
// TreeNode define
type TreeNode = structures.TreeNode
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func convertBST(root *TreeNode) *TreeNode {
if root == nil {
return root
}
sum := 0
dfs538(root, &sum)
return root
}
func dfs538(root *TreeNode, sum *int) {
if root == nil {
return
}
dfs538(root.Right, sum)
root.Val += *sum
*sum = root.Val
dfs538(root.Left, sum)
}