package main func bstToGst(root *TreeNode) *TreeNode { var rec func(*TreeNode, int) int rec = func(node *TreeNode, toAdd int) int { if node == nil { return toAdd } // recurse to right toAdd = rec(node.Right, toAdd) // add to the current value originalValue := node.Val node.Val += toAdd // pass new sum to the left toAdd = rec(node.Left, toAdd+originalValue) // return new sum return toAdd } rec(root, 0) return root }