题目:
给定一个二叉搜索树 root (BST),请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。
提醒一下, 二叉搜索树 满足下列约束条件:
- 节点的左子树仅包含键 小于 节点键的节点。
- 节点的右子树仅包含键 大于 节点键的节点。
- 左右子树也必须是二叉搜索树。
算法:
func bstToGst(root *TreeNode) *TreeNode {
var dfs func(node *TreeNode, sum int) int
dfs = func(node *TreeNode, sum int) int {
if node == nil {
return sum
}
right := dfs(node.Right, sum)
node.Val = node.Val + right
left := dfs(node.Left, node.Val)
return left
}
node := root
dfs(node, 0)
return root
}