剑指offer22 _层次遍历:从上往下打印二叉树。
从上往下打印二叉树
http://www.nowcoder.com/questionTerminal/7fe2212963db4790b57431d9ed259701
class Solution {
public:
vector<int> PrintFromTopToBottom(TreeNode* root) {
vector<int>res;
if(root==NULL)return res;//根节点为空,则直接返回一个空的vector数组
queue<TreeNode*>que; //定义一个队列利用队列先进先出的特点,达到层次遍历的目的
TreeNode* p=root;
que.push(p); //将第一层的节点入队
int level_num=0;//计算二叉树的层数
while(!que.empty()){ //如果队列列表为空,以层次遍历完全
int size=que.size(); //计算当前层次的节点数
for(int i=0;i<size;++i){//并以此将他们存储下来
p=que.front(); //从左到右的顺序依次让这层的节点出队
que.pop();
res.push_back(p->val);
if(p->left)que.push(p->left);//如果该节点的下一层有子节点,则将他们入队
if(p->right)que.push(p->right);
}
level_num++;//层数加一
}
return res;
}
};利用队列先进先出的特点,达到层次遍历的目的。由于队列的特点,新入队的节点只会排在队列的后面,并不会影响队列中上一层节点的出队。
1.将某一层的全部节点入队。
2.计算该层的节点数size。
3.将队列的前size个节点出队。按造从左到右的顺序依次遍历,遍历的同时判断该节点有无下一层的子树,若有则入队,从而将下一层的全部节点入队。


