# 【LeetCode】 102. Binary Tree Level Order Traversal ## Description > Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level). > 給一個二元樹,按照階層遍歷回傳它每個節點的值。(從左到右,一層一層) ## Example: ``` For example: Given binary tree [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 return its level order traversal as: [ [3], [9,20], [15,7] ] ``` ## Solution * 使用`BFS`去跑樹的結構即可。 * 用一個`queue`去存左子樹和右子樹,同時也去紀錄子樹的`level`。每次從`queue`裡面拿新的點來跑,直到`queue`為空。 * 下方的範例code其實越寫越冗,而且遞迴傳的參數太多,但整體概念和結構是對的。 ### Code ```C++=1 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: void BFS(vector<vector<int>>& ans,vector<int>& nodes,vector<pair<TreeNode*,int>>& queue,int &level) { //take new node from queue pair<TreeNode*,int> n = queue.front(); queue.erase(queue.begin()); if(!n.first)return; //check level if(level==n.second) nodes.push_back(n.first->val); else { level = n.second; ans.push_back(nodes); nodes.clear(); nodes.push_back(n.first->val); } //push next node into queue queue.push_back(pair<TreeNode*,int>(n.first->left,n.second+1)); queue.push_back(pair<TreeNode*,int>(n.first->right,n.second+1)); //run until queue is empty while(queue.size()!=0) BFS(ans,nodes,queue,level); //check last level is pushed if(nodes.size()!=0) { ans.push_back(nodes); nodes.clear(); } } vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> ans; vector<int> nodes; int level=0; vector<pair<TreeNode*,int>> queue(1,pair<TreeNode*,int>(root,0)); BFS(ans,nodes,queue,level); return ans; } }; ``` ###### tags: `LeetCode` `C++`