剑指 Offer 32 - I. 从上到下打印二叉树
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回:
[3,9,20,15,7]
二叉树的层次遍历
利用一个队列实现,每访问一个结点将其存储进队列,并从队列头部取出一个节点进行visit
//队列相关操作
queue <TreeNode*> q; //初始化
q.push(item) //将item压入队列尾部
q.pop() //删除队首元素,但不返回
q.front() //返回队首元素,但不删除
q.back() //返回队尾元素,但不删除
q.size() //返回队列中元素的个数
q.empty() //检查队列是否为空,如果为空返回true,否则返回false
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
};
二叉树的层次遍历
class Solution {
public:
vector<int> levelOrder(TreeNode* root) {
queue <TreeNode*> Q;
vector<int> res;
if(root) Q.push(root);
while(!Q.empty()){
TreeNode* tmp = Q.front();
Q.pop();
res.push_back(tmp->val);
if(tmp->left) Q.push(tmp->left);
if(tmp->right) Q.push(tmp->right);
}
return res;
}
};