应该不难吧,一定要用C语言啊,带点注释,采纳时会继续提高悬赏的!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
是二叉链表的层次遍历吧。 #include <stdlib.h>
//定义动态分配空间的二叉链表类型
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//层次遍历输出二叉链表的所有结点的值
void LevelOrderTraverse(BiTree T){
typedef struct PNode{
BiTNode *ptr;struct PNode *next;
}PNode;//定义链表结点类型,链表的数据域存放二叉链表结点的指针
PNode *R,*L,*p;
if(T){
R=(PNode*)malloc(sizeof(PNode));//建立第一个链表结点
if(!R){
printf("\nLevelOrderTraverse Error: Failed To MALLOC Memory!");
return;
}
R->ptr=T;R->next=NULL;//R指向尾结点,尾结点指针域必须为空
L=R;p=L;//L指向链表头结点
while(p){//p结点的数据域指向当前处理的二叉链表结点
printf("%c",p->ptr->data);
if(p->ptr->lchild){//如果有左孩子,添加一个结点
R->next=(PNode*)malloc(sizeof(PNode));
if(!(R->next)){
printf("\nLevelOrderTraverse Error: Failed To MALLOC Memory!");
return;
}
R=R->next;R->ptr=p->ptr->lchild;R->next=NULL;//R重新指向尾结点,尾结点的数据域为当前处理的二叉链表结点的左孩子指针
}
if(p->ptr->rchild){//如果有右孩子,添加一个结点
R->next=(PNode*)malloc(sizeof(PNode));
if(!(R->next)){
printf("\nLevelOrderTraverse Error: Failed To MALLOC Memory!");
return;
}
R=R->next;R->ptr=p->ptr->rchild;R->next=NULL;
}
L=p->next;//L指向下一个链表结点,准备释放p结点
free(p);//释放p结点
p=L;//p重新指向链表头结点
}
}
}
这里使用了队列结构来存储某个结点的孩子结点。