二叉树层序遍历
问题所在
按下面程序的写法,*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);
}
}
}