题目描述:

方法1:非递归,使用队列辅助

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector<vector<int>> result;
        queue<TreeNode*> que;
        if(!root) return result;
        que.push(root);

        TreeNode* temp;

        while(!que.empty()){
            int size = que.size();  //每一次while遍历,que存的都是某一层的节点
            vector<int> layer;
            for(int i=0;i<size;i++){
                temp = que.front();
                que.pop();
                layer.push_back(temp->val);
                if(temp->left) que.push(temp->left);
                if(temp->right) que.push(temp->right);
            }
            result.push_back(layer);
        }
        return result;

    }
};

方法2:递归

class Solution {
public:
    void order(TreeNode* root, vector<vector<int>>& result, int length){
        if(!root) return;
        if(length == result.size()) result.push_back(vector<int>());
        result[length].push_back(root->val);
        order(root->left,result,length+1);
        order(root->right,result,length+1);
    }

    vector<vector<int>> levelOrder(TreeNode* root) {
        int length = 0;
        vector<vector<int>> result;
        order(root,result,length);
        return result;
    }
};