给你一个二叉树的根节点 root ,计算并返回整个树的坡度 。
一个树的节点的坡度 定义即为,该节点左子树的节点之和和右子树节点之和的差的绝对值 。如果没有左子树的话,左子树的节点之和为 0 ;没有右子树的话也是一样。空结点的坡度是 0 。
整个树的坡度就是其所有节点的坡度之和。
此题是一个二叉树遍历的题目,依旧使用递归来做题:
思路:先深度优先遍历一遍二叉树,然后求左右子节点的差的绝对值,求和后返回即可。
class Solution:
def findTilt(self, root: Optional[TreeNode]) -> int:
sums=0
def dfs(root):
nonlocal sums
if not root:
return 0
else:
L=dfs(root.left)
R=dfs(root.right)
sums += abs(L-R)
return root.val+L+R
dfs(root)
return sums
- 此题中用到了nonlocal,该关键字的意思是在内部函数中要使用外部函数定义的变量时必须使用nonlocal来声明这是外部变量。
- 区分于global,global主要是在函数内部需要对外部的全局变量进行修改时,需要使用global后才能进行修改。