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

461 篇文章 1 订阅

基础: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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值