对二叉树进行层次遍历。
分析:
- 需要借助队列。
- 将根结点入队。然后当队不空时,弹出队头,并把队头的左右子树入队。
- 队列控制了逐层次序。保证每一层都线入队。
代码:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
// 牛客网上不能用deque,改成queue可以。
class Solution {
public:
vector<int> PrintFromTopToBottom(TreeNode* root) {
if(root == nullptr)
return res;
// 根节点入队,第一层
queueTreeNode.push(root);
// 队不空时
while(queueTreeNode.size())
{
// 队头出队
TreeNode * ptmp = queueTreeNode.front();
queueTreeNode.pop();
res.push_back(ptmp->val);
// 出队结点的左右子结点
if(ptmp->left)
queueTreeNode.push(ptmp->left);
if(ptmp->right)
queueTreeNode.push(ptmp->right);
}
return res;
}
private:
vector<int> res;
queue<TreeNode *> queueTreeNode; // 辅助队列
};