题解 | #输出二叉树的右视图#

输出二叉树的右视图

https://www.nowcoder.com/practice/c9480213597e45f4807880c763ddd5f0

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 求二叉树的右视图
 * @param preOrder int整型一维数组 先序遍历
 * @param preOrderLen int preOrder数组长度
 * @param inOrder int整型一维数组 中序遍历
 * @param inOrderLen int inOrder数组长度
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 */
int* solve(int* preOrder, int preOrderLen, int* inOrder, int inOrderLen, int* returnSize ) {
    // write code here
    if(!preOrder || !inOrder) {*returnSize = 0; return NULL;}

    struct TreeNode *pTN_stk[preOrderLen];
    int idx = 0, i = 1, j = 0, top, cmp;
    struct TreeNode *Header = (struct TreeNode *)calloc(1, sizeof(struct TreeNode));
    struct TreeNode *pHead = Header;
    pHead->val = top = preOrder[0];
    cmp = inOrder[0];
    pTN_stk[0] = pHead;
    while(i < preOrderLen) {
        if(top != cmp) {
            pHead->left = (struct TreeNode *)calloc(1, sizeof(struct TreeNode));
            pHead = pHead->left;
            pHead->val = top = preOrder[i++];
            pTN_stk[++idx] = pHead;
            continue;
        }
        j++;
        while(--idx != -1 && pTN_stk[idx]->val == inOrder[j]) {
            pHead = pTN_stk[idx];
            j++;
        }
        pHead->right = (struct TreeNode *)calloc(1, sizeof(struct TreeNode));
        pHead = pHead->right;
        pHead->val = top = preOrder[i++];
        cmp = inOrder[j];
        pTN_stk[++idx] = pHead;
    }

    int f_idx = 0, rear_idx = 0, record[preOrderLen], id = 0;
    pTN_stk[0] = Header;
    idx = 0;
    while(idx <= rear_idx) {
        while(idx < f_idx) {
            pHead = pTN_stk[idx++];
            if(pHead->left) pTN_stk[++rear_idx] = pHead->left;
            if(pHead->right) pTN_stk[++rear_idx] = pHead->right;
            free(pHead);
        }
        pHead = pTN_stk[idx++];
        if(pHead->left) pTN_stk[++rear_idx] = pHead->left;
        if(pHead->right) pTN_stk[++rear_idx] = pHead->right;
        record[id++] = pHead->val;
        free(pHead);
        f_idx = rear_idx;
    }

    int *res = (int*)malloc(id * sizeof(int));
    memcpy(res, record, id*sizeof(int));
    *returnSize = id;
    return res;
}

全部评论

相关推荐

04-29 22:35
门头沟学院 Java
牛友说改了名字能收到offer:旧图新发查看图片
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-19 17:02
鼠鼠深知pdd的强度很大,但是现在没有大厂offer,只有一些不知名小厂我是拒绝等秋招呢,还是接下?求大家帮忙判断一下!
水中水之下水道的鼠鼠:接了再说,不图转正的话混个实习经历也不错
投递拼多多集团-PDD等公司10个岗位 >
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务