刷题的时候总是出现这类错误,现在记录下解决这类错误的办法。
class Solution:
def convertBST(self, root: TreeNode) -> TreeNode:
def dfs(root):
#nonlocal tmp
if not root:return
dfs(root.right)
root.val = tmp + root.val
tmp = root.val
dfs(root.left)
tmp = 0
dfs(root)
return root
如上代码所示,这样运行就会报错。之前一开始尝试的办法是声明global变量,但是没用。后面找到nonlocal关键字(代码中注释的语句),问题完美解决,这是因为nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量。后面发现如果使用global,还需再嵌套函数内global变量(代码注释的地方)
class Solution:
def convertBST(self, root: TreeNode) -> TreeNode:
global tmp
tmp = 0
def dfs(root):
#global tmp
if not root:return
dfs(root.right)
root.val = tmp + root.val
tmp = root.val
dfs(root.left)
dfs(root)
return root