题目
给定一个二叉树,在树的最后一行找到最左边的值。
思路
BFS 同时记录下当前行的最左边的值,最终返回它。
复杂度分析
假设树有 n 个节点。
- 时间复杂度O(n),遍历整棵树。
- 空间复杂度O(n),空间复杂度与整棵树的节点数相关。
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int findBottomLeftValue(TreeNode root) {
return bfs(root);
}
private int bfs(TreeNode root) {
int leftVal = root.val;
int thisLevelNums = 1;
int nextLevelNums = 0;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()){
TreeNode node = queue.poll();
thisLevelNums --;
if (node.left != null){
queue.offer(node.left);
nextLevelNums ++;
}
if (node.right != null){
queue.offer(node.right);
nextLevelNums ++;
}
if (thisLevelNums == 0 && !queue.isEmpty()){
thisLevelNums = nextLevelNums;
nextLevelNums = 0;
leftVal = queue.element().val;
}
}
return leftVal;
}
}