1、题目
从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如:
2.思路
本题使用队列做为辅助容器,利用队列的先进先出策略,按层打印二叉树。举例:首先,将根节点压入队列;然后,先将队首元素放入存储遍历结果的vector中,再判断队首节点是否有左右子节点,如果有左右子节点,则将做右子节点压入队列,队首元素弹出队首,循环执行直至队列为空。最后,将存储遍历结果的vector返回。
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> result;
// 边界条件
if(root == NULL)
return result;
// 辅助容器:双端队列(存储指向二叉树节点的指针)
queue<TreeNode*> q;
// 辅助指针:指向队列弹出的指针
TreeNode* fr;
// 根节点入队列
q.push(root);
// 遍历队列
while(!q.empty())
{
//
fr=q.front();
result.push_back(fr->val);
if(fr->left != NULL)
q.push(fr->left);
if(fr->right != NULL)
q.push(fr->right);
q.pop();
}
return result;
}
};