劍指 Offer II 054. 所有大於等於節點的值之和
阿新 • • 發佈:2021-08-23
劍指 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