剑指 Offer II 054. 所有大于等于节点的值之和
给定一个二叉搜索树,请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。
提醒一下,二叉搜索树满足下列约束条件:
- 节点的左子树仅包含键 小于 节点键的节点。
- 节点的右子树仅包含键 大于 节点键的节点。
- 左右子树也必须是二叉搜索树。
示例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]
提示:
- 树中的节点数介于 0 和 104 之间。
- 每个节点的值介于 -104 和 104 之间。
- 树中的所有值 互不相同 。
- 给定的树为二叉搜索树。
题解一(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