剑指OFFER 把二叉树打印成多行
Posted virgildevil
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指OFFER 把二叉树打印成多行相关的知识,希望对你有一定的参考价值。
剑指OFFER 把二叉树打印成多行
题目
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路
二叉树的宽搜,加一个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值来表示一个结点(而不是用指针)也似乎是可行的.
以上是关于剑指OFFER 把二叉树打印成多行的主要内容,如果未能解决你的问题,请参考以下文章