题目:
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).
For example:
Given binary tree {3,9,20,#,#,15,7},
3
/ \
9 20
/ \
15 7
return its bottom-up level order traversal as:
[
[15,7],
[9,20],
[3]
]
解答:
/**
* 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:
vector<vector<int>> levelOrderBottom(TreeNode* root) {
if (!root) {
vector<vector<int>> rtn;
return rtn;
}
stack<vector<int>*> myStack;
list<TreeNode*> a;
list<TreeNode*> b;
list<TreeNode*> *pCurLayer = &a;
list<TreeNode*> *pNextLayer = &b;
pCurLayer->push_back(root);
while (!pCurLayer->empty()) {
vector<int> *pVec = new vector<int>;
for (list<TreeNode*>::iterator it = pCurLayer->begin(); it != pCurLayer->end(); ++it) {
if ((*it)->left) {
pNextLayer->push_back((*it)->left);
}
if ((*it)->right) {
pNextLayer->push_back((*it)->right);
}
pVec->push_back((*it)->val);
}
myStack.push(pVec);
list<TreeNode*> *tmp = pCurLayer;
pCurLayer = pNextLayer;
pNextLayer = tmp;
pNextLayer->clear();
}
vector<vector<int>> rtn;
while (!myStack.empty()) {
vector<int> *pVec = myStack.top();
rtn.push_back(*pVec);
delete pVec;
myStack.pop();
}
return rtn;
}
};