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