题目
算法思想 :明显这道题目考察的是bfs,虽然要求是倒序输出,但是我们的思路还是应该正着走一遍。简单做法就是我们层次遍历直接放进二维数组,用vector自带的reverse函数就可以了,但是本着造轮子的原则,我还是手动把reverse实现了,其中为了方便表示层数,我用pair把treenode和高度减一联系在一起,具体思路参照代码。
vector<vector<int>> levelOrderBottom(TreeNode* root) {
vector<vector<int> > null;
if(root == NULL)
return null;
queue<pair<TreeNode*,int> > a,b;
pair<TreeNode*,int> tmp;
a.push(make_pair(root,0) );
while(!a.empty())
{
tmp = a.front();
if(tmp.first->left != NULL)
a.push(make_pair(tmp.first->left,tmp.second+1));
if(tmp.first->right != NULL)
a.push(make_pair(tmp.first->right,tmp.second+1));
b.push(make_pair(tmp.first,tmp.second));
a.pop();
}
int high = b.back().second+1;
vector<vector<int> > rev(high);
while(!b.empty())
{
tmp = b.front();
int h = tmp.second;
if(tmp.first != NULL)
rev[high-h-1].push_back(tmp.first->val);
b.pop();
}
return rev;
}