一网友因为自己是2硕,面试华为的时候审批不通过,吐槽化身华黑子了,让我感到很意外,这面试的是啥岗位,211硕士都不要了,难道只要9硕?结果一位9硕的网友说,因为自己本科是双非,现在也泡死了,还和他说机会不大,让他别吊死在华为。
--------------下面是今天的算法题--------------
来看下今天的算法题,这题是LeetCode的第513题:找树左下角的值。
问题描述
来源:LeetCode第513题
难度:中等
给定一个二叉树的根节点 root,请找出该二叉树的 最底层最左边节点的值 。假设二叉树中至少有一个节点。
示例1:
输入: root = [2,1,3] 输出: 1
示例2:
输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7
二叉树的节点个数的范围是 [1,10^4]
-2^31 <= Node.val <= 2^31 - 1
问题分析
这题让计算二叉树最底层最左边的值,最简单的一种方式就是使用BFS,一层一层的遍历。一般情况下使用BFS我们习惯性的从左往右遍历,在这里我们要从右往左遍历,也就是 先访问右子节点在访问左子节点 ,这样二叉树中最后一个访问的节点就是最底层最左边的值。
JAVA:
public int findBottomLeftValue(TreeNode root) {
Queue
q = new LinkedList<>(); q.add(root); while (!q.isEmpty()) { root = q.poll(); // 先访问右子节点,在访问左子节点 if (root.right != null) q.add(root.right); if (root.left != null) q.add(root.left); } return root.val; }C++:
public:
int findBottomLeftValue(TreeNode *root) {
queue
q; q.push(root); while (!q.empty()) { root = q.front(); q.pop(); // 先访问右子节点,在访问左子节点 if (root->right) q.push(root->right); if (root->left) q.push(root->left); } return root->val; }Python:
def findBottomLeftValue(self, root: Optional[TreeNode]) -> int:
q = deque()
q.append(root)
while q:
root = q.popleft()
# 先访问右子节点,在访问左子节点
if root.right:
q.append(root.right)
if root.left:
q.append(root.left)
return root.val笔者简介
博哥,真名:王一博,毕业十多年, 作者,专注于 数据结构和算法 的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解800多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以 下载我整理的1000多页的PDF算法文档 。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.