二叉树层序创建

二叉树层序遍历

问题所在

按下面程序的写法,*temp用malloc申请内存的时候它的两个子节点指针都是为NULL的,所以如果只是将子节点的指针入队,入队时收到的内容就为NULL。那么出队的时候也出NULL,就无法分辨入队的是属于哪个节点的子节点指针。无法形成二叉树。

解决方法

为了避免这种情况,我们将指向子节点的指针的地址(指向子节点的二级指针)入队,用以辨别这是哪个节点的子节点指针。
比如对于第一个节点,输入了它的两个子节点的的指针的地址。随后出队的时候出的就是指向第一个节点的左子节点的指针的地址,通过<*地址>的取该地址内的内容我们就可以去控制它的左子节点指针指向。

void cCreateBitTree(treeNode **root){//层序创建二叉树
        initQueue(&p1,&a1);
        treeNode **temp = root;
        char c;
        enQueue(p1,a1,temp);//入队指向首个节点的二级指针
        while(queueLen(p1)!=0){
                deQueue(p1,a1,&temp);//取出指向首个节点的二级指针
                scanf("%c",&c);
                if(c==' ')
                        *temp=NULL;
                else{
                        *temp = (treeNode*)malloc(sizeof(treeNode));
                        (*temp)->data = c;
                        enQueue(p1,a1,&(*temp)->left);//入队指向左右节点的二级指针
                        enQueue(p1,a1,&(*temp)->right);
                }
        }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值