最后一组数据无法显示

TreeNodePtr createTreeWithLevelOrder(int *data, int size) {
    QueuePtr Q;
    Q=InitQueue();
    TreeNodePtr T;
    ListNodePtr find;
    int i;
    TreeNodePtr Node;
    TreeId=1;
    for(i=0;i<size;i++)
    {
        Node=createTreeNode(data[i],NULL,NULL);
        EnQueue(Q,Node);
    }
    T=GetHead(Q);
    if(T->val==-1)
    {
        free(Q);
        return NULL;
    }
    while(!QueueEmpty(Q))
    {
        Node=GetHead(Q);
        DeQueue(Q);
        if(Node->val!=-1){
        find=Q->dummyHead->next;
        while(find)
        {
            if(find->node->id==(2*(Node->id)))
            {
                if(find->node->val==-1)
                {
                    Node->left=NULL;
                }
                else
                {
                    Node->left=find->node;
                }
                if(find->next)
                {
                    find=find->next;
                    if(find->node->val==-1)
                    {
                        Node->right=NULL;
                    }
                    else
                    {
                        Node->right=find->node;
                    }
                }
                break;
            }
            else find=find->next;
        }
    }
    }
    free(Q);
    return T;
}

 想问一下这个函数哪里出了问题,这个函数是通过队列层序遍历构建二叉树的。

void EnQueue(QueuePtr queue, TreeNodePtr node) {
    ListNodePtr curr = createListNode(node, NULL);
    queue->tail->next = curr;
    queue->tail = queue->tail->next;
    queue->size++;
}
 
void DeQueue(QueuePtr queue) {
    if (queue->size == 0) {
        perror("error! the size of queue is zero when call DeQueue().");
        return;
    }
    ListNodePtr head = queue->dummyHead->next;
    queue->dummyHead->next = head->next;
    queue->size--;
    if (queue->size == 0) queue->tail = queue->dummyHead;
    free(head);
}

 

你这个代码好像不完整,把EnQueue方法贴出来看看。

void EnQueue(QueuePtr queue, TreeNodePtr node) {
    ListNodePtr curr = createListNode(node, NULL);
    queue->tail->next = curr;
    queue->tail = queue->tail->next;
    queue->size++;
}

void DeQueue(QueuePtr queue) {
    if (queue->size == 0) {
        perror("error! the size of queue is zero when call DeQueue().");
        return;
    }
    ListNodePtr head = queue->dummyHead->next;
    queue->dummyHead->next = head->next;
    queue->size--;
    if (queue->size == 0) queue->tail = queue->dummyHead;
    free(head);
}

 

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y