LeetCode - 513. 找樹左下角的值
阿新 • • 發佈:2020-12-15
題目
給定一個二叉樹,在樹的最後一行找到最左邊的值。
思路
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;
}
}