---
# System prepended metadata

title: 'LeetCode #102 [Binary Tree Level Order Traversal](https://leetcode.com/problems/binary-tree-level-order-traversal/)'
tags: [LeetCode, Medium, Tree, Queue]

---

###### tags: `LeetCode` `Tree` `Queue` `Medium`
# LeetCode #102 [Binary Tree Level Order Traversal](https://leetcode.com/problems/binary-tree-level-order-traversal/)
### (Medium)

給你一個二叉樹，請你返回其按 層序遍歷 得到的節點值。 （即逐層地，從左到右訪問所有節點）。


---
運用queue加上for迴圈可以一次處理一整層的節點, 當level=q.size()的時候代表到了新的一層了, 此時要幫ans加一個新的vector<int>供下一層的節點插入所用。

要注意佇列的push()跟pop()會及時改變q的大小, 所以在for迴圈中i的初始值要設為q.size(), 終止條件為i>0; 而不是起始條件i=0中止條件i<q.size(), 這樣會被q的大小變動影響。


---
```
class Solution {
public:
    vector<vector<int>> ans;
    vector<vector<int>> levelOrder(TreeNode* root) {
        if(!root)return {};
        int level=0;
        queue<TreeNode*> q;
        q.push(root);
        while(!q.empty()){
            if(level==ans.size())ans.emplace_back();
            for(int i=q.size();i>0;i--){
                TreeNode* tmp=q.front();q.pop();
                ans[level].push_back(tmp->val);
                if(tmp->left)q.push(tmp->left);
                if(tmp->right)q.push(tmp->right);
            }
            level++;
        }
        return ans;
    }
};
```