构建完全二叉树,但输入两个点就报错了有无大佬帮忙看一看

#include<stdio.h>
#include<malloc.h> 
#define Maxsize 10

//用层次建立二叉树,引入队列 
typedef struct Bnode{
    struct Bnode *lchild;
    struct Bnode *rchild;
    char data;
}Bnode,*Btree; 
typedef struct{
    Bnode *arr[Maxsize];//指针数组 
    int front,rear;
}sqQueue; 
void InitQueue(sqQueue &Q){
    Q.rear=Q.front=0;

bool Enqueue(sqQueue &Q, Bnode *x){//插入数据类型要能对应上 
    if((Q.rear+1)%Maxsize==Q.front)
        return false;
    Q.arr[Q.rear]=x; 
    Q.rear=(Q.rear+1)%Maxsize;
}
bool Dequeue(sqQueue &Q,Bnode *x){//插入数据类型要能对应上 
    if(Q.rear=Q.front)
        return false; 
    x=Q.arr[Q.front];
    Q.front=(Q.front+1)%Maxsize;
    return true;
}
Bnode *levelserach(Btree &tr){//返回一个结点 
    sqQueue Q;
    InitQueue(Q);
    char flag=' ';
    if(tr->lchild==NULL||tr->rchild==NULL){//左右但凡有一个为空就可插入 
        printf("sdda");

        return tr;
    }else{
    Enqueue(Q,tr);
    printf("年时代的哈"); 
    printf("%c我的",tr->lchild);
    while(true){//建立完全二叉树 
        Btree q;
        Dequeue(Q,q);
        printf("%c",q->data);
        if(q->lchild!=NULL){//有问题 
            Enqueue(Q,q->lchild);
        }else if(q->rchild!=NULL){
            Enqueue(Q,q->rchild);
        }else{
            return q;
        }
    } 
    }
}
void initTree(Btree &tr){//初始化二叉树,要输入根节点数据 
    Bnode *p;
    p=(Bnode*)malloc(sizeof(Bnode));
    p->lchild=NULL;
    p->rchild=NULL;//将左右孩子都置空 
    char input;
    printf("请输入根节点数据\n");
    scanf("%c",&input);
    p->data= input;
    tr=p; 
}
void insert(Btree &bt,char x){
    Bnode *p,*q;//p是新建立的结点 
    p=(Bnode*)malloc(sizeof(Bnode));
    p->lchild=NULL;
    p->rchild=NULL;//将左右孩子都置空 
    char input=x;
    p->data=input;
//    printf("1插入成功"); 
    q=levelserach(bt);//寻找待插入的双亲结点 
    if(q->lchild==NULL){
        q->lchild=p;
        printf("左插入成功\n"); 
    }else if(q->rchild==NULL){
        q->rchild=p;
        printf("右插入成功\n"); 
    }    
}
int main(void)
{
    Btree root;
    initTree(root);
    char input;
    scanf("%c",&input);
    while(input!='n'){
        insert(root,input);
        scanf("%c",&input);//需要在循环里面设置scanf重输入 
    } 
    printf("sada");
    return 0;
}


 

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值