【二叉树】leetcode513-找树左下角的值

基础: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
经验分享 程序员 微信小程序 职场和发展