题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路:要么就用两个栈,第一个栈存一层,然后依次取出第一个栈的结点,把他们的左右子结点放到第二个栈里,直到第一个栈清空,然后交替。第二种思路就是用一个队列,然后记录每一层的结点数就可以了。我用的就是第二种思路。
代码:
/*
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) {
vector<vector<int> > res;
vector<int> tem;
if(pRoot==NULL)
return res;
queue<TreeNode*> q;
q.push(pRoot);
int count=1,len=0;
while(!q.empty()){
TreeNode* t = q.front();
tem.push_back(t->val);
if(t->left){
q.push(t->left);
len++;
}
if(t->right){
q.push(t->right);
len++;
}
q.pop();
count--;
if(count==0){
res.push_back(tem);
tem.clear();
count=len;
len=0;
}
}
return res;
}
};
看到了一个牛客上的大佬的代码,比我的简单多了,思想是一样的,啥也不多说了,膜。。。
链接:https://www.nowcoder.com/questionTerminal/445c44d982d04483b04a54f298796288
来源:牛客网
class
Solution {
public
:
vector<vector<
int
> > Print(TreeNode* pRoot) {
vector<vector<
int
> > vec;
if
(pRoot == NULL)
return
vec;
queue<TreeNode*> q;
q.push(pRoot);
while
(!q.empty())
{
int
lo = 0, hi = q.size();
vector<
int
> c;
while
(lo++ < hi)
{
TreeNode *t = q.front();
q.pop();
c.push_back(t->val);
if
(t->left) q.push(t->left);
if
(t->right) q.push(t->right);
}
vec.push_back(c);
}
return
vec;
}
};