给定一个二叉搜索树,请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。
提醒一下,二叉搜索树满足下列约束条件:
示例1:

输入:root = [4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]
输出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]
示例2:
输入:root = [0,null,1]
输出:[1,null,1]
示例3:
输入:root = [1,0,2]
输出:[3,3,2]
示例4:
输入:root = [3,2,4,1]
输出:[7,9,4,10]
 
提示:
题解一(python):
 1 # Definition for a binary tree node.
 2 # class TreeNode:
 3 #     def __init__(self, val=0, left=None, right=None):
 4 #         self.val = val
 5 #         self.left = left
 6 #         self.right = right
 7 class Solution:
 8     def convertBST(self, root: TreeNode) -> TreeNode:
 9         # RNL
10         total = 0
11 
12         def Func_RNL(root:TreeNode):
13             nonlocal total  # nonlocal见下方注解
14             if root :
15                 Func_RNL(root.right)
16                 total += root.val
17                 root.val = total
18                 Func_RNL(root.left)
19         
20         Func_RNL(root)
21         return root
22 
23 # 注:
24 # 一、global : 若局部要对全局变量修改,应在局部声明该全局变量;倘若在局部对该全局变量仅仅是使用而不需要修改,则不需要加global
25 # 二、nonlocal:声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量。则在修改此值时则需要加上nonlocal
原文:https://www.cnblogs.com/Dennis-Chen/p/15176797.html