使用递归方法,声明一个全局二维数组来保存遍历结果,以根结点为第0层,每次递归都使层数++,并在对应层数插入结点值。
由于结果集最初为空,需要随着层数的加深不断向其中加入新数组。由于使用层数进行插入,所以只需让层数与size进行比较,两者相等则说明层数越界,要想结果集中加入新数组。

这里有个小坑,算是基础不牢。最开始写的递归函数设了三个参数,有两个是现在的层数level和二叉树结点指针p,还有一个参数是结果集二维数组,发现结果不正确。调试查找原因是因为直接将结果集作为递归参数使用传值方式传入,出错。应将结果集的引用传入,或简单粗暴,直接将结果集写死写入函数中。

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

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @return int整型vector<vector<>>
     */
    vector<vector<int>> v;
    vector<vector<int> > levelOrder(TreeNode* root) {
        // write code here
        if(root == NULL){
            return v;
        }
        go(0,root);
        return v;
    }
    void go(int level, TreeNode* p){
        if(v.size() == level){
            vector<int> blank;
            v.push_back(blank);
        }
        v.at(level).push_back(p->val);
        if(p->left != NULL){
            go(level+1, p->left);
        }
        if(p->right != NULL){
            go(level+1,p->right);
        }
    }
    
};