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 都搞的炸栈工程师。博客持续更新,如果觉得写的不错,欢迎来一波老铁三连,不好的话也欢迎指正,互相学习,共同进步。

你可能感兴趣的:(LeetCode,算法)