持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情
题目描述
给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。
假设二叉树中至少有一个节点。
示例 1:
输入: root = [2,1,3]
输出: 1
示例 2:
输入: [1,2,3,4,null,5,6,null,null,7]
输出: 7
提示:
- 二叉树的节点个数的范围是 [1,104]
- -231 <= Node.val <= 231 - 1
思路
可以使用广度优先遍历,从右往左遍历每一层的每个节点,那么最后一个遍历到的节点就是我们所求解的值。按照层来遍历的方法是,定一个一个Queue,先把根节点放入这个Queue,然后循环从这个Queue中获取节点,获取到节点后,如果存在子节点,就把子节点也放入到这个Queue中,因为Queue是先进先出的,而且一开始只有一个根节点,即第0层的所有节点,所以这某一层的节点遍历完成之前,不会遍历到下层的节点,每一层的所有节点在这个Queue中是连续挨在一起的。由于我们要求解的是左下角的值,所以我们把子节点放入Queue的顺序是先放右子节点,再放左子节点,这样在同一层中,右边的节点肯定比左边的节点先遍历到,同时满足
- 上层节点比下层节点先遍历到
- 同一层中,右侧节点比左侧节点先遍历到 这样,我们最后一个遍历到的节点,就是这个树左下角的节点了。
Java版本代码
class Solution {
public int findBottomLeftValue(TreeNode root) {
Queue<TreeNode> queue = new ArrayDeque<>();
queue.offer(root);
int ans = root.val;
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
ans = node.val;
if (node.right != null) {
queue.offer(node.right);
}
if (node.left != null) {
queue.offer(node.left);
}
}
return ans;
}
}