从上往下打印出二叉树的每个节点,同层节点从左至右打印
利用一个双端队列来实现会比较简便。将双端队列第一个元素的左右节点插入到队列末尾,并且同时打印头节点并弹出,循环既可以实现一个按层打印二叉树的过程,代码如下
/*
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;
deque<TreeNode*> temp;
if(root==NULL) return res;
TreeNode *cur=root;
temp.push_back(cur); //将头结点插入队列中
while(!temp.empty()){
if(temp.front()->left!=NULL) temp.push_back(temp.front()->left); //对于遍历到的节点,将他的左右节点放入到队列末尾
if(temp.front()->right!=NULL) temp.push_back(temp.front()->right);
res.push_back(temp.front()->val); //打印改节点
temp.pop_front(); //弹出该节点
}
return res;
}
};