标签:first 指针 ack cond -- 结果 pop val while
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
二叉树的宽搜,加一个pair类型记录当前遍历到的结点的所在层数
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
if(pRoot==NULL)return vector<vector<int> >();
queue<pair<TreeNode*,int> > que;//结点,层数
vector<vector<int> > res;//返回的结果
map<int,vector<int> >m;//层数--该层的所有结点
que.push(pair<TreeNode*,int>(pRoot,0));
while(!que.empty())
{
pair<TreeNode*,int> p = que.front();
que.pop();
m[p.second].push_back(p.first->val);
if(p.first->left!=NULL){
que.push(pair<TreeNode*,int>(p.first->left,p.second+1));
}
if(p.first->right!=NULL){
que.push(pair<TreeNode*,int>(p.first->right,p.second+1));
}
}
auto it = m.begin();
while(it != m.end())
{
res.push_back(it->second);
it++;
}
return res;
}
};
似乎测试集中所有的结点的val值不会重复,那么用val值来表示一个结点(而不是用指针)也似乎是可行的.
标签:first 指针 ack cond -- 结果 pop val while
原文地址:https://www.cnblogs.com/virgildevil/p/12227209.html