###### tags: `LeetCode` `Tree` `Recursion` `Medium`
# LeetCode #107 [Binary Tree Level Order Traversal II](https://leetcode.com/problems/binary-tree-level-order-traversal-ii/)
### (Medium)
給定一個二元樹,返回其節點值自底向上的層序遍歷。 (即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷)
---
最低葉節點的高度為0, 簡單的做法是將根節點設為0, 依照深度將子節點的數值插入對應數組位置, 最後再將整個數組反轉, 原本為最高高度的葉節點在反轉完後的高度變為0, 滿足題目要求。
要注意getDepth中的前兩行要先做, 否則會出現level大於ans.size()的overflow情況(但是增加ans大小的判斷是level==ans.size(), 也就是說, 當level大於ans.size()的時候不會滿足判斷式, 此時會發生overflow)。
---
```
class Solution {
public:
vector<vector<int>> ans;
vector<vector<int>> levelOrderBottom(TreeNode* root) {
if(!root)return ans;
ans.emplace_back();
ans[0].push_back(root->val);
if(root->left)getDepth(root->left, 1);
if(root->right)getDepth(root->right, 1);
reverse(ans.begin(),ans.end());
return ans;
}
void getDepth(TreeNode* node, int level){
if(node){
if(level==ans.size())ans.emplace_back();//先做
ans[level].push_back(node->val);//先做
if(node->left)getDepth(node->left, level+1);
if(node->right)getDepth(node->right, level+1);
}
}
};
```