层序遍历二叉树 希望详细给出点注释 把建立二叉树 和主函数都写下来 谢谢了 急用!!!!!

论坛 期权论坛 期权     
菜鸟小CC   2018-4-26 13:44   3168   1
层序遍历二叉树 希望详细给出点注释  把建立二叉树 和主函数都写下来 谢谢了 急用!!!!!
分享到 :
0 人收藏

1 个回复

倒序浏览
2#
swellspirit  3级会员 | 2018-4-30 02:08:17 发帖IP地址来自
/*二叉树的层次遍历,借助队列来实现,这里用数组实现队列*/
#include
#include
#include
typedef struct node
{
    char data;    //节点
struct node *lchild, *rchild;  //左右孩子的指针

}*BiTree, BiTNode;

void creat(BiTree *T)    // 递归法建树 ,用先序遍历法输入数据,如:abc***d**
{
    char ch;
scanf("%c",&ch);
if (ch == '*')   //*代表结束
  (*T) = NULL;
else
{
     if (! ( (*T) = (BiTree) malloc(sizeof(BiTNode))))
   exit(1);
  (*T)->data = ch;
  creat( & ((*T)->lchild));
  creat( & ((*T)->rchild));
}
}
/*层次遍历树,用队列实现*/
void levelTraverse(BiTree T)
{
    BiTree Queue[20];  //注意,要保证数组队列够用
BiTree p;
int front=0, rear=0; /*表示队头指针和队尾指针*/
if (T)
{
     p = T;
  Queue[rear] = p;  //根指针入队
  rear = (rear+1) % 20;  //队尾指针加1对20求余可以实现循环队列,合理利用空间
  while (front != rear)  //队不空
  {
      p = Queue[front];   //出队,进行访问
   printf("%c",p->data);
   front = (front+1) % 20;  //实现循环
   if (p->lchild)     //如果p有左子树,则左子树入队
   {
       Queue[rear] = p->lchild;
    rear = (rear+1) % 20;
   }
   if (p->rchild)    //如果p有右子树,将右子树入队
   {
      Queue[rear] = p->rchild;
      rear = (rear+1) % 20;
   }
  }//while
}//if
}

int main()
{
   BiTree T;
   creat(&T);
   printf("层次遍历的结果\n");
   levelTraverse(T);
   printf("\n");
   return 0;
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP