算法-二叉树层序遍历

1.题目

给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)(代码在牛客网中执行通过)

2.思路

3.代码

/**
 * struct TreeNode {
 *    int val;
 *    struct TreeNode *left;
 *    struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > levelOrder(TreeNode* root) {
        // 创建一个容器存放所有的要输出的list集合
        vector<vector<int>> result;
        if (!root){
            return result;
        }
        // 用于保存将要被弹出去的节点
        TreeNode* cur = root;
        // 将即将弹出的节点保存到一个新的容器
        vector<int> vtemp;
        // 创建一个队列进行节点的输入输出
        queue<TreeNode*> lis;
        queue<int> lev;
        // 先将根节点存入队列
        lis.push(root);
        lev.push(0);
        while(!lis.empty()){
            int len = lis.size();
            for(int i=0;i<len;i++){
                // 先保存将弹出去的节点
                cur = lis.front();
                vtemp.push_back(cur->val);
                // 从左到右(队列的先进先出)弹出每一层的节点
                lis.pop();
                // 每弹出一个根节点则将他的左右孩子节点,保存到队列中来
                if(cur->left){
                    lis.push(cur->left);
                }
                if(cur->right){
                    lis.push(cur->right);
                }
                
            }
            // 将每层的节点集合保存到,总的容器里面
            result.push_back(vtemp);
            // 释放vtemp中的元素
            vtemp.clear();
        }
        return result;
    }
};

 

posted on 2020-09-13 20:59  ioYuki  阅读(319)  评论(0编辑  收藏  举报

导航