做完Binary Tree Level Order Traversal這道題,再來做現在這道題Binary Tree Level Order Traversal II,描述如下:
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]
]
confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.
有了前一道題的解題思路和程序,做這道題,簡直就是信手拈來,直接將最後的結果翻轉後返回就ok了。代碼如下:
std::vector<std::vector<int> > levelOrderBottom(TreeNode *root)
{
std::vector<std::vector<int> > result,resultReverse;
std::vector<int> temp;
std::queue<TreeNode *> treeQueue1,treeQueue2;
if (!root)
{
return result;
}
treeQueue1.push(root);
TreeNode *node = NULL;
while(!treeQueue1.empty() || !treeQueue2.empty())
{
if (!treeQueue1.empty())
{
node = treeQueue1.front();
treeQueue1.pop();
if (node->left)
{
treeQueue2.push(node->left);
}
if (node->right)
{
treeQueue2.push(node->right);
}
temp.push_back(node->val);
}
if (treeQueue1.empty())
{
//this means that this level is over
result.push_back(temp);
temp.clear();
treeQueue1.swap(treeQueue2); //swap two queue
}
}
resultReverse.insert(resultReverse.begin(),result.rbegin(),result.rend());
return resultReverse;
}
當然了,還有其他方法了,趕着去吃飯,就先這樣上交着,回來再想。