1038.从二叉搜索树到更大和树

115 阅读1分钟

题目:
给定一个二叉搜索树 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
}