【leetcode】102. 二叉树的层序遍历

 

class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        vector <vector <int>> ret;
        if (!root) {
            return ret;
        }

        queue <TreeNode*> q;
        q.push(root);
        while (!q.empty()) {
            int currentLevelSize = q.size();
            ret.push_back(vector <int> ());
            for (int i = 1; i <= currentLevelSize; ++i) {
                auto node = q.front(); q.pop();
                ret.back().push_back(node->val);
                if (node->left) q.push(node->left);
                if (node->right) q.push(node->right);
            }
        }
        
        return ret;
    }
};

 

void recurseion(struct TreeNode* root, int* returnSize, int* col, int cnt,int** arr){
    if (!root)
        return;
    if (cnt+1 > *returnSize)
        *returnSize = cnt+1;
    if (col[cnt] == 0)
        arr[cnt] = (int*)calloc(1000, sizeof(int*));
    arr[cnt][col[cnt]++] = root->val;
    recurseion(root->left, returnSize, col, cnt+1, arr);
    recurseion(root->right, returnSize, col, cnt+1, arr);
}
int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){
    int** arr = (int**)calloc(1000, sizeof(int*));
    *returnSize = 0;
    *returnColumnSizes = (int*)calloc(1000, sizeof(int));
    recurseion(root, returnSize, *returnColumnSizes, 0, arr);
    return arr;
}

 

posted @ 2020-12-15 19:54  温暖了寂寞  阅读(97)  评论(0编辑  收藏  举报