diff --git a/go/binary-search-tree-to-greater-sum-tree.go b/go/binary-search-tree-to-greater-sum-tree.go new file mode 100644 index 0000000..2ba12a7 --- /dev/null +++ b/go/binary-search-tree-to-greater-sum-tree.go @@ -0,0 +1,26 @@ +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 +}