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).
vector<vector<int > > levelOrderBottom(TreeNode *root)
{
vector<vector<int > > result;
if(root == NULL)
{
return result;
}
deque<TreeNode* >myDeque;
myDeque.push_back(root);
myDeque.push_back(NULL);
vector<int> temp;
while(!myDeque.empty())
{
TreeNode* tempNode = myDeque.front();
myDeque.pop_front();
if(tempNode)
{
temp.push_back(tempNode->val);
if(tempNode->left)
{
myDeque.push_back(tempNode->left);
}
if(tempNode->right)
{
myDeque.push_back(tempNode->right);
}
}
else
{
result.push_back(temp);
temp.clear();
if(!myDeque.empty())
{
myDeque.push_back(NULL);
}
}
}
int start = 0;
int end = (int)result.size() - 1;
while(start < end)
{
swap(result[start++], result[end--]);
}
return result;
}