题解 | #按之字形顺序打印二叉树#

按之字形顺序打印二叉树

https://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0

/**
 * struct TreeNode {
 *  int val;
 *  struct TreeNode *left;
 *  struct TreeNode *right;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param pRoot TreeNode类
 * @return int整型二维数组
 * @return int* returnSize 返回数组行数
 * @return int** returnColumnSizes 返回数组列数
 */
int** Print(struct TreeNode* pRoot, int* returnSize, int** returnColumnSizes ) {
    // write code here
    *returnColumnSizes = (int*)malloc(sizeof(int) * 1500);
    int** res = (int**)malloc(sizeof(int*) * 1500);
    int gidx = 0;
    bool zx = true;
    //memset(res, NULL, 11);
    struct TreeNode* que1[1501] = { NULL };
    int idx1 = 0;
    struct TreeNode* que2[1501] = { NULL };
    int idx2 = 0;
    struct TreeNode* move = NULL;

    if (pRoot != NULL) {
        //根节点进队列
        que1[idx1++] = pRoot;
        move = que1[0];
    } else {
        return NULL;
    }

    while (move != NULL) {
        //判断从哪个队列进数组,正序还是反序进
        if ((gidx + 1) % 2 == 1) {
            res[gidx] = (int*)malloc(sizeof(int) * idx1);
            zx = true;
        } else {
            res[gidx] = (int*)malloc(sizeof(int) * idx2);
            zx = false;
        }
        if (zx) {
            for (int i = 0; i < idx1; i++) {
                //出队列
                res[gidx][i] = que1[i]->val;
                //子节点进另一个队列
                if (que1[i]->left != NULL) que2[idx2++] = que1[i]->left;
                if (que1[i]->right != NULL) que2[idx2++] = que1[i]->right;
            }
            (*returnColumnSizes)[gidx] = idx1;
            idx1 = 0;
            move = que2[0];
        } else {
            for (int i = 0; i < idx2; i++) {
                //出队列
                res[gidx][i] = que2[idx2 - 1 - i]->val;
                //子节点进另一个队列
                if (que2[i]->left != NULL) que1[idx1++] = que2[i]->left;
                if (que2[i]->right != NULL) que1[idx1++] = que2[i]->right;
            }
            (*returnColumnSizes)[gidx] = idx2;
            idx2 = 0;
            move = que1[0];
        }
        //free(res[gidx]);
        gidx++;
        if (idx1 == 0 && idx2 == 0) break;
    }
    *returnSize = gidx;
    return res;
}

全部评论

相关推荐

腾讯 文心一言 腾讯总包高5w
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务