**給定一個二叉樹,返回其節點值自底向上的層次遍歷。 (即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷) **
例如,給出
二叉樹:[3,9,20,null,null,15,7]
3
/\
9 20
/ \
15 7返回的層次遍歷結果:
[
[15, 7],
[9, 20],
[3],
]
來源:leetcode - 107
知識點:
- 隊列:先進先出
- BFS:採用隊列保存節點
簡要思路:不斷向隊列中添加節點,進隊,出隊,直到樹中所有的節點都遍歷完,但是在每層節點保存時,插入到 res 頭位置。
詳細思路:定義一個隊列,將根節點放入隊列,判斷隊列是否爲空,while 循環中添加一個 for 循環,每次添加每層的 n 個元素到 res 結果集中的頭位置,直到所有節點都遍歷完。
代碼:
class Solution {
public List<List<Integer>> levelOrderBottom(TreeNode root) {
List<List<Integer>> ans = new LinkedList<>();
if(root == null){
return ans;
}
Queue<TreeNode> q = new LinkedList<>();
q.add(root);
while (!q.isEmpty()){
List<Integer> tmp = new LinkedList<>();
int len = q.size();
for (int i=0; i<len; i++){
TreeNode node = q.poll();
tmp.add(node.val);
if(node.left != null){
q.add(node.left);
}
if(node.right != null){
q.add(node.right);
}
}
ans.add(0, tmp);
}
return ans;
}
}
人生總是那麼痛苦嗎?還是隻有小時候是這樣? ——總是如此。