基础:nonlocal与global关键字
-
参见:https://www.cnblogs.com/brad1994/p/6533267.html
-
nonlocal:这是一个函数里面再嵌套了一个函数。当使用 nonlocal 时,就声明了该变量不只在嵌套函数inner()里面才有效, 而是在整个大函数里面都有效。
-
global:对整个环境下的变量起作用,而不是对函数类的变量起作用。
题目:
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
解答:
方法一:递归
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def findBottomLeftValue(self, root: TreeNode) -> int:
maxlen = -float("INF") #记录最大深度
leftvalue = 0 #记录最大深度最左侧节点的值
def traversal(root,cur_len):
nonlocal maxlen,leftvalue
if (not root.left) and (not root.right): #根
#找到最大深度的第一个节点(最左节点)值
if cur_len>maxlen:
maxlen=cur_len
leftvalue=root.val
return
if root.left: #左
traversal(root.left,cur_len+1)
if root.right: #右
traversal(root.right,cur_len+1)
return
traversal(root,0)
return leftvalue
方法二:迭代,层序遍历
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def findBottomLeftValue(self, root: TreeNode) -> int:
que=[root]
while que:
t=len(que)
res=que[0]
for i in range(t):
cur=que.pop(0)
if cur.left:
que.append(cur.left)
if cur.right:
que.append(cur.right)
return res.val