27 lines
455 B
Go
27 lines
455 B
Go
|
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
|
||
|
}
|