力扣打卡:剑指 Offer II 045. 二叉树最底层最左边的值
解题思路
经典的二叉树层序遍历框架
- 二叉树的最大深度
- 二叉树的最小深度
- 二叉树最右边的值
- 二叉树最左边的值
- 二叉树的右视图
- 二叉树的左视图
- 以上都是适合n叉树
if(root==null) return 0;
Queue<TreeNode> que = new LinkedList<>();
que.offer(root);
while(!que.isEmpty()){
int size = que.size(); // 需要记录下当前层的节点个数
for(int i=0; i<size; i++){
TreeNode node = que.poll();
// do something
if(node.left!=null) que.offer(node.left);
if(node.right!=null) que.offer(node.right);
}
// do something
}
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int findBottomLeftValue(TreeNode root) {
// 经典的层序遍历框架,找到最后一层,返回相应的数据
if(root==null) return 0;
int leftmost = 0;
Queue<TreeNode> que = new LinkedList<>();
que.offer(root);
while(!que.isEmpty()){
int size = que.size(); // 这个变量很重要,记录每一层的节点个数
for(int i=0; i<size; i++){ // 对每一层的节点进行遍历
TreeNode node = que.poll(); // 弹出节点
if(i==0) leftmost =node.val; // 如果是每一层最左边的值,那么进行记录
if(node.left!=null) que.offer(node.left); // 判断左右子节点或者是n叉树的子节点群是否为空,加入到队列中
if(node.right!=null) que.offer(node.right);
}
}
return leftmost;
}
}