题目描述:从上往下打印出二叉树的每个节点,同层节点从左至右打印
这道题明显是广度优先,一看就知道是用队列这种数据结构,其实不用STL的队列也可以做,那就是要多加一个变量来记录树的深度,应该会比用队列麻烦,在这里直接“拿来主义”了。
在未到树的最深层之前,队列中的节点会越来越多,因为每次执行下来都是入二出一(完全二叉树),在到达最深层后,队列中的节点会逐渐减少,直至为空。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
vector<int> PrintFromTopToBottom(TreeNode *root) {
vector<int> res;//存放结果
if(!root)
return res;
queue<TreeNode *> q;//之前一直报错,就是因为少了*号
q.push(root);
while(!q.empty())
{
res.push_back(q.front()->val);
if(q.front()->left)
q.push(q.front()->left);
if(q.front()->right)
q.push(q.front()->right);
q.pop();
}
return res;
}
};