二叉链表的建立

给你一个根结点,然后顺着根节点生成一颗二叉树,(兄弟结点是根结点的右孩子,孩子结点是他的左孩子);求算法 我的有点问题,求解决 谢谢

void GenerateRoot(node *&head,BitTree *&root) //生成二叉树的根节点
{
node *p=head;
  while(p->next!=NULL)
{  
if(p->next->m_precedenceCourse==0)
{
root=new BitTree();
root->m_courseScore=p->next->m_courseScore;
root->m_courseSerial=p->next->m_courseSerial;
root->m_precedenceCourse=p->next->m_precedenceCourse;
root->lchild=NULL;
root->rchlid=NULL;
node *delnode=p->next;
p->next=delnode->next;
delnode->next=NULL;
free(delnode);
 
// printAll(head);
return;
}
p=p->next;
}
}
void GenerateNode(node *&head,BitTree *&p) //生成二叉树的非根节点
{ node *p1=head;
  node *p2=head;
BitTree *child;
node *p3=head;
for (;p1->next!=NULL;p1=p1->next)

  {

  // 生成右子树
  if(p1->next->m_precedenceCourse==p->m_precedenceCourse)
  // 发现一门课程和指针p所指向的课程有相同的先修课then

  {
  child=new BitTree();
child->m_courseScore=p1->next->m_courseScore;
child->m_courseSerial=p1->next->m_courseSerial;
child->m_precedenceCourse=p1->next->m_precedenceCourse;
child->lchild=NULL;
child->rchlid=NULL;
  p->rchlid=child;//将该课程信息插入到指针p指向节点的右孩子;
  node *delnode=p1->next;
p1->next=delnode->next;
delnode->next=NULL;
free(delnode);
  //从课程信息链表中删除该课程信息;

  GenerateNode(head,p->rchlid); // 递归调用
  return;
  for (;p2->next!=NULL;p2=p2->next)

  {

  // 生成右子树
  if(p2->next->m_precedenceCourse==p->m_precedenceCourse)
  // if 发现一门课程和指针p所指向的课程有相同的先修课then

  { child=new BitTree();
child->m_courseScore=p2->next->m_courseScore;
child->m_courseSerial=p2->next->m_courseSerial;
child->m_precedenceCourse=p2->next->m_precedenceCourse;
child->lchild=NULL;
child->rchlid=NULL;
p->rchlid=child;//将该课程信息插入到指针p指向节点的右孩子;
  node *delnode=p2->next;
p2->next=delnode->next;
delnode->next=NULL;  
free(delnode);

  //将该课程信息插入到指针p指向节点的右孩子;

  ///从课程信息链表中删除该课程信息;

  GenerateNode(head,p->rchlid); // 递归调用

  return;

  }

  //if 发现一门课程是指针p所指向的课程的后继课程then
  if(p2->next->m_precedenceCourse==p->m_courseSerial)
  {
child=new BitTree();
child->m_courseScore=p2->next->m_courseScore;
child->m_courseSerial=p2->next->m_courseSerial;
child->m_precedenceCourse=p2->next->m_precedenceCourse;
child->lchild=NULL;
child->rchlid=NULL;
p->lchild=child;//将该课程信息插入到指针p指向节点的右孩子;
  node *delnode=p2->next;
p2->next=delnode->next;
delnode->next=NULL;
free(delnode);

  // 将该课程信息插入到指针p指向节点的左孩子;

  // 从课程信息链表中删除该课程信息;

  GenerateNode(head,p->lchild); // 递归调用

  return;

  }

}

  }

  // 生成左子树

  // if 发现一门课程是指针p所指向的课程的后继课程then
  if(p1->next->m_precedenceCourse==p->m_courseSerial)
  {  
  child=new BitTree();
child->m_courseScore=p1->next->m_courseScore;
child->m_courseSerial=p1->next->m_courseSerial;
child->m_precedenceCourse=p1->next->m_precedenceCourse;
child->lchild=NULL;
child->rchlid=NULL;
p->lchild=child;//将该课程信息插入到指针p指向节点的右孩子;
  node *delnode=p1->next;
p1->next=delnode->next;
delnode->next=NULL;
free(delnode);

  // 将该课程信息插入到指针p指向节点的左孩子;

  // 从课程信息链表中删除该课程信息;

  GenerateNode(head,p->lchild); // 递归调用
  return;
  for (;p3->next!=NULL;p3=p3->next)

  {

  // 生成右子树

  //if 发现一门课程和指针p所指向的课程有相同的先修课then
  if(p3->next->m_precedenceCourse==p->m_precedenceCourse)
  {
child=new BitTree();
child->m_courseScore=p3->next->m_courseScore;
child->m_courseSerial=p3->next->m_courseSerial;
child->m_precedenceCourse=p3->next->m_precedenceCourse;
child->lchild=NULL;
child->rchlid=NULL;
p->rchlid=child;//将该课程信息插入到指针p指向节点的右孩子;
  node *delnode=p3->next;
p3->next=delnode->next;
delnode->next=NULL;
free(delnode);

  //将该课程信息插入到指针p指向节点的右孩子;

  //从课程信息链表中删除该课程信息;

  GenerateNode(head,p->rchlid); // 递归调用

  return;

  }

  // if 发现一门课程是指针p所指向的课程的后继课程then
  if(p3->next->m_precedenceCourse==p->m_courseSerial)
  {  
child=new BitTree();
child->m_courseScore=p3->next->m_courseScore;
child->m_courseSerial=p3->next->m_courseSerial;
child->m_precedenceCourse=p3->next->m_precedenceCourse;
child->lchild=NULL;
child->rchlid=NULL;
  p->lchild=child;//将该课程信息插入到指针p指向节点的右孩子;
  node *delnode=p3->next;
p3->next=delnode->next;
delnode->next=NULL;
free(delnode);

  // 将该课程信息插入到指针p指向节点的左孩子;

  // 从课程信息链表中删除该课程信息;

  GenerateNode(head,p->lchild); // 递归调用

  return;

   

}
}
   
 
 
 
}

  }

}

作者: a123456_a123456_a   发布时间: 2011-06-14

夜了 洗洗睡吧 明天有人来解决的

作者: nightkids_008   发布时间: 2011-06-14