思路:这个题目思路非常清晰,设置两个队列来记录每一层节点的顺序,用一个栈结构来记录每一层的结果,最后依次弹出栈保存到vector结构中,就是从底向上、从左至右的结果。
code:
class Solution {
public:
vector<vector<int> > levelOrderBottom(TreeNode *root) {
vector<vector<int> > ret;
stack<vector<int> > retStack;
if(root == NULL) return ret;
queue<TreeNode *> Q1,Q2;
Q1.push(root);
while(!Q1.empty()){
vector<int> temp;
while(!Q1.empty()){
TreeNode * t = Q1.front();
Q1.pop();
temp.push_back(t->val);
if(t->left != NULL)
Q2.push(t->left);
if(t->right != NULL)
Q2.push(t->right);
}
retStack.push(temp);
while(!Q2.empty()){
TreeNode * t = Q2.front();
Q1.push(t);
Q2.pop();
}
}
while(!retStack.empty()){
vector<int> temp = retStack.top();
retStack.pop();
ret.push_back(temp);
}
return ret;
}
};