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