LeetCode 题解-513.找树左下角的值

LeetCode 第 513. Find Bottom Left Tree Value题,题目难度 Medium。

一. 题目要求

给定一个二叉树,在树的最后一行找到最左边的值。

示例 1:

输入:

    2
   / \
  1   3

输出:
1
示例 2:

输入:

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

输出:
7
  • 注意: 可以假设树(即给定的根节点)不为 NULL。

二. 解题思路 & 代码实现

题目要求是查找最底层的最左边节点,那么关键任务就是:

  • 遍历到二叉树的最底层
  • 获取最底层的最左子节点

按层遍历的话首先想到的就是 BFS 广度优先遍历,遍历二叉树的每一层,获取其下一层的所有子节点,如果没有下一层的子节点了说明已经到了最底层,此时返回最左边的子节点即可。

实现代码如下:

class Solution {
    List<TreeNode> bottomLevel = new ArrayList<>();

    public int findBottomLeftValue(TreeNode root) {
        List<TreeNode> nodes = new ArrayList<>();
        nodes.add(root);
        this.bfs(nodes);
        return this.bottomLevel.get(0).val;
    }

    private void bfs(List<TreeNode> nodes) {

        List<TreeNode> nextLevel = new ArrayList<>();
        int size = nodes.size();
     
        for (int i = 0; i < size; i ++) {
            TreeNode node = nodes.get(i);
            if (node.left != null) {
                nextLevel.add(node.left);
            }

            if (node.right != null) {
                nextLevel.add(node.right);
            }
        }

        if (nextLevel.size() == 0) {
            this.bottomLevel = nodes;
        }else {
            this.bfs(nextLevel);
        }

    }
}

时间复杂度为 O(N), 实际测试运行的时候 3ms,beats 96%。


老铁,都看到这了来一波点赞、评论、关注三连可好

我是 AhriJ邹同学,前后端、小程序、DevOps 都搞的炸栈工程师。博客持续更新,如果觉得写的不错,欢迎来一波老铁三连,不好的话也欢迎指正,互相学习,共同进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值