剑指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个节点出队。按造从左到右的顺序依次遍历,遍历的同时判断该节点有无下一层的子树,若有则入队,从而将下一层的全部节点入队。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务