一网友因为自己是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算法文档 。