/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */
方法一:首先是建立两个队列,然后队列A是装队列B的子节点,也就是下一层的结点,然后在把A中的结点传到B中,就可以接着下一层输出层次遍历的结果
class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > levelOrder(TreeNode* root) {
        queue<TreeNode*>q1;
         queue<TreeNode*>q2;//两个队列
         vector<int>res;
         vector<vector<int>>res2;
          if(root==NULL)
        {
            return res2;
        }
         q1.push(root);
         while(!q1.empty())
         {
            while(!q1.empty())
            {
                TreeNode*node=q1.front();
                q1.pop();
                res.push_back(node->val);
                if(node->left)
                {
                    q2.push(node->left);
                }
                if(node->right)
                {
                    q2.push(node->right);
                }
            }
            res2.push_back(res);
            res.clear();
            while(!q2.empty())
            {
                q1.push(q2.front());
                q2.pop();
            }
         }
    return res2;
    }
};
方法二:非递归,用一个队列,设置一个变量来存同一层的结点的数量,然后用for循环来将一层的结点放到vector<vector<int>>对应的位置上。
class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > levelOrder(TreeNode* root) {
        vector<vector<int>>res2;
        if(root==NULL)
        {
            return res2;
        }
        vector<int>res;
        queue<TreeNode*>q;
        TreeNode*node=NULL;
        q.push(root);
        while(!q.empty())
        {
            
            int n=q.size();
            for(int i=0;i<n;i++)
            {
                node=q.front();
                res.push_back(node->val);
                q.pop();
                if(node->left)
                {
                    q.push(node->left);
                }
                if(node->right)
                {
                    q.push(node->right);
                }
            }
            res2.push_back(res);
            res.clear();
        }
         return res2;
    
    }
};
方法三:递归法
class Solution {
public:
    void process(vector<vector<int> >&res2,TreeNode* root,int depth)
    {
        if(root)
        {
            if(res2.size()<depth)
            {
                 res2.push_back(vector<int>{});
            }
           
            res2[depth-1].push_back(root->val);
        }
        else {
        return ;
        }
        process(res2,root->left,depth+1);
        process(res2,root->right,depth+1);
    }


    vector<vector<int> > levelOrder(TreeNode* root) {
       vector<vector<int> >res2;
       if(root==NULL)
       {
        return res2;
       }
      process(res2,root,1);
        return res2;
    
    }
};