找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

5320

积分

0

好友

736

主题
发表于 昨天 19:14 | 查看: 5| 回复: 0

一位大厂员工吐槽了公司领导的做法:领导习惯性地在晚上10点钟通过公司群聊发布工作消息,虽然很多员工都已经看过了消息,但碍于时间已晚,大家选择了“已读不回”,希望能在第二天再做回复。

领导凌晨2点在群里发飙的聊天截图

然而,凌晨2点,领导突然在群里发火,表示无法理解为什么大家不回应信息,并直接威胁道:“搞不明白就离职,以后‘已读不回’一律按旷工处理。”

员工们并非不重视工作,而是对合理的工作与休息时间有着基本的需求和期待。在信息爆炸的时代,如何平衡工作与生活、提升沟通效率,成为了现代职场管理者亟需解决的重要课题。

面试题:二叉树的右视图

站在右边看一棵树,能看到哪些节点?这题看着像层序遍历的入门题,真写起来,很多人第一反应还是递归一路往右钻。结果一上手就错:右视图不是“右边那条链”,而是每一层最后看到的那个节点。这两个概念差得还挺远。像这种题,我第一眼一般不急着写 DFS,先把“层”这个信息抓稳,不然代码写着写着就会把题意写歪。

先说判断:既然题目问“右视图”,本质就是每层取一个值。那最顺手的就是层序遍历。队列里一层一层出,当前层最后一个节点,直接塞进结果集,结束。

Java 实现如下,够短也不拧巴:

class Solution {
    public List<Integer> rightSideView(TreeNode root) {
        List<Integer> ans = new ArrayList<>();
        if (root == null) {
            return ans;
        }

        Deque<TreeNode> queue = new ArrayDeque<>();
        queue.offer(root);

        while (!queue.isEmpty()) {
            int levelSize = queue.size();
            for (int i = 0; i < levelSize; i++) {
                TreeNode node = queue.poll();

                if (i == levelSize - 1) {
                    ans.add(node.val);
                }

                if (node.left != null) {
                    queue.offer(node.left);
                }
                if (node.right != null) {
                    queue.offer(node.right);
                }
            }
        }
        return ans;
    }
}

比如这棵树:

    1
   / \
  2   3
   \   \
    5   4

第一层看到 1,第二层看到 3,第三层看到 4,所以答案是 [1,3,4]

这题也能用 DFS 做,而且 DFS 更像是“先看右边,右边没了再看左边”。关键点不是递归本身,而是第一次到达某个深度时,那个节点就是这一层从右边看到的节点。所以递归顺序必须先右后左,这地方一改,结果就变味了。

class Solution {
    public List<Integer> rightSideView(TreeNode root) {
        List<Integer> ans = new ArrayList<>();
        dfs(root, 0, ans);
        return ans;
    }

    private void dfs(TreeNode node, int depth, List<Integer> ans) {
        if (node == null) {
            return;
        }

        if (depth == ans.size()) {
            ans.add(node.val);
        }

        dfs(node.right, depth + 1, ans);
        dfs(node.left, depth + 1, ans);
    }
}

真要选的话,面试里更愿意先写 BFS。原因很简单:题目明着按层拿结果,层序遍历不容易解释偏,也不容易把“右视图”误写成“右子树优先遍历结果”。

这题难点不在代码量,在于别把观察角度理解错。树题经常这样,代码就十几行,想偏了能调半天。




上一篇:库克告别公开信:卸任苹果CEO,转任执行董事长(中英全文)
下一篇:CodeFlow:粘贴GitHub地址,一键生成项目依赖关系图
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-5-4 01:08 , Processed in 0.724749 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表