非递归队列方法建立二叉树

非递归队列方法建立层次二叉树
思想:要认清rear和front的关系
      1:函数刚开始rear== 0是要在while中第一次起作用,rear == front 表示栈空.
      2:看函数体,当rear在自增后卫奇数时,此时q[front]的右孩子已经处理完,跟紧其后的是front++,
         表明下一个处理的节点为当前处理节点的兄弟节点或者堂兄弟节点,反正就是往右的下一个节点.
      3:算法用到了数组指针,每个元素存放已输入节点的地址,其中rear和front的关系为front + 2 = rear
      4:因为队列的性质,所以从函数课已看出来[front]为当前急需出对的节点,[rear]为当前继续出队节点的左孩子或右孩子

      
    

bitree *q[MAX];
bitree *creat()
{
  int x;
  int front,rear;
  bitree *root,*s;
  root = NULL;
  s = NULL;
  front = 1;
  rear = 0;
  printf("\n\t\t请输入,结束输入-99,叶节点输入0:");
  scanf("%d",&x);
  while(x != -99)
  {
   if(x != 0)
   {
    {
     s = new bitree;
     s->data = x;
     s->lchild = NULL;
     s->rchild = NULL;
    }
    rear = rear + 1;
    q[rear] = s;
    if(rear == 1)
     root = s;
    else
    {
     if(s && q[front])
     {
                                  //因为数组指针总存放的规律的节点地址,所以front一次处理就行了
      if(rear % 2 == 0)
      {
       q[front]->lchild = s;
      }
      else
      {
       q[front]->rchild = s;
      }
    
     }
     if(rear%2 == 1)front = front + 1;
    }
   }
 printf("\n\t\t请输入,结束输入-99,叶节点输入0:");
 scanf("%d",&x);
  }

  return root;
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值