服了!凌晨二点多领导在微信群里骂人。。

科技   2024-12-23 14:00   陕西  

作为一个程序员,我看到这件事忍不住想吐槽一下。

最近,西安某科技公司领导在工作群里发飙,原因竟然是晚上十点多发的信息没有人回复,结果凌晨二点他大发雷霆,开始在群里一通“输出”。


我只能说,领导,你真的是不懂得照顾员工的情绪啊!工作群里没人回复,是不是可以理解为大家都已经“下班”了呢?别忘了,人家也有私生活,要是把所有时间都贡献给公司,恐怕得被贴上“工作狂”的标签了吧?

领导这种“凌晨两点还骂人”的行为,真的让我想说:你是在加班,还是在给公司挖坑啊?明天早上再说清楚不行吗?有什么问题面对面解决,深夜里这样搞,真的有点过了。

我看到有网友评论说“找个大一点的公司,素质会高一点”,我觉得也没错。

你如果总是“逆来顺受”,可能真的得习惯这样的工作氛围了。但你看看,老板连休息都不放过,看来这公司要么是加班成瘾,要么就是快要崩了,员工连休息的权利都没了,真让人心疼。😓

所以啊,别把自己逼得太紧,工作再忙也得找时间喘口气。

算法题:找树左下角的值

嗨,大家好!今天我们来聊一个经典的算法题:找树左下角的值

首先,题目给我们的是一棵二叉树,要求我们找出树的左下角的值。也就是我们从树的最底层开始,顺着最左边的路径,最终找到的那个值。说白了,就是这棵树的“最左边的叶子节点”在最底层的值。

问题听起来像是个找树的深度问题,但其实做法不一定要用复杂的递归。我们可以用层序遍历的方式来解决。这是一个典型的广度优先搜索(BFS)问题,结合队列来逐层查找,从最左边开始,遇到的最后一个节点就是我们想要的结果。

解法

  1. 我们首先利用队列(queue)来进行广度优先搜索,逐层扫描树。
  2. 每一层的最左节点,就是我们需要关注的目标。
  3. 我们不断更新队列,直到最后一层,最终找到的就是那个值。

代码示例如下:

from collections import deque

# 二叉树的节点结构
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def findBottomLeftValue(root: TreeNode) -> int:
    # 如果树为空,直接返回
    if not root:
        return None
    
    # 使用队列进行BFS
    queue = deque([root])
    while queue:
        # 当前层的节点数
        level_size = len(queue)
        # 从队列中拿出所有节点,逐层扫描
        for i in range(level_size):
            node = queue.popleft()
            # 只保留当前层的最左节点
            if i == 0:
                leftmost_value = node.val
            # 把左右子节点加入队列,准备扫描下一层
            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)
    
    return leftmost_value

代码解析

  1. TreeNode类:我们先定义了一个简单的TreeNode类来模拟二叉树结构。每个节点有三个属性:值val、左子节点left和右子节点right

  2. findBottomLeftValue函数

  • 这里我们用队列queue来存储当前节点。每次遍历树的当前层时,我们把当前节点的左右子节点加入队列,直到遍历完当前层所有节点。
  • 我们只保留当前层的最左节点,即第一个被访问的节点。
  • 每次进入下一层时,leftmost_value会更新为当前层的最左节点。
  • 返回结果:我们最终返回的就是最后一层的最左节点的值。

  • 举个例子

    假设我们有一棵二叉树,如下所示:

           1
         /   \
        2     3
       / \   / \
      4   5 6   7
     / 
    8

    我们从根节点开始逐层扫描,先看到1,再看到2和3,接着是4、5、6和7,最后是8。最左边的叶子节点就是8,所以返回的结果应该是8。

    时间复杂度和空间复杂度

    • 时间复杂度:我们遍历每个节点一次,因此时间复杂度是O(N),其中N是树的节点数。
    • 空间复杂度:由于使用了队列存储节点,最坏情况下空间复杂度也是O(N),例如树的宽度很大时。

    小结

    这道题的本质是利用层序遍历来找到树的最底层最左边的节点值。使用队列进行BFS非常直观,而且能避免递归深度过深的问题。对于树的深度较大时,BFS在内存上更加高效,避免了递归栈溢出的风险。

    对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。
    🔥虎哥私藏精品 热门推荐🔥

    虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》

    资料包含了《IDEA视频教程》《最全python面试题库》《最全项目实战源码及视频》《毕业设计系统源码》,总量高达650GB全部免费领取

    Python技术迷
    回复:python,领取Python面试题。分享AI编程,AI工具,Python技术栈,Python教程,Python编程视频,Pycharm项目,Python爬虫,Python数据分析,Python核心技术,Python量化交易。
     最新文章