# 【LeetCode】 107. Binary Tree Level Order Traversal II ## Description > Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root). > 給一個二元樹,從底部往上地按照階層遍歷回傳它每個節點的值。(從左到右,一層一層從樹葉到樹根) ## Example: ``` Given binary tree [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 return its bottom-up level order traversal as: [ [15,7], [9,20], [3] ] ``` ## Solution * 偷懶的解法:複製[102. Binary Tree Level Order Traversal](https://hackmd.io/@Zero871015/LeetCode-102)的Code,得到一般的`level order`之後,再把結果反向。 ### 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>> levelOrderBottom(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); reverse(ans.begin(),ans.end()); return ans; } }; ``` ###### tags: `LeetCode` `C++`