• c语言实现按层次(广度优先)非递归遍历二叉链树


     1 #include<stdio.h>
     2 #include<conio.h>
    4 #include<malloc.h> 5 typedef char datatype;   //字符类型 内容 6 typedef struct node{ //二叉链树数据结构 7 datatype data; 8 struct node *lchild,*rchild; 9 }bitree; 10 bitree *CreatTree(){    //上一篇的建立二叉链树的函数和这里的一模一样,欢迎看上一篇的关于建立树的注释 11 char ch; 12 bitree *Q[100]; 13 int front,rear; 14 bitree *root,*s; 15 root=NULL; 16 front=1,rear=0; 17 while((ch=getchar())!='#') 18 { 19 s=NULL; 20 if(ch!='@'){ 21 s=(bitree*)malloc(sizeof(bitree)); 22 s->data=ch; 23 s->lchild=NULL; 24 s->rchild=NULL; 25 } 26 rear++; 27 Q[rear]=s; 28 if(rear==1) 29 root=s; 30 else{ 31 if(s&&Q[front]){ 32 if(rear%2==0) 33 Q[front]->lchild=s; 34 else 35 Q[front]->rchild=s; 36 } 37 if(rear%2==1) 38 front++; 39 } 40 } 41 return root; 42 } 43 void BianLi(bitree *p){ //层次遍历二叉树的函数,其实和建立二叉树的思想很相似,都是用到下面的“队列数组”,p是要访问的树的根结点 44 bitree *Q[100]; //队列数组,存放bitree节点指针 45 bitree *s; //当前遍历的节点 46 int rear=1,front=0; 47 Q[rear]=p; //最先把头结点p入队 48 while(front<rear){ //队列数组不为空,则进入(继续)循环 49 front++; 50 s=Q[front]; //当前的节点入队 51 printf("%c",s->data); //访问元素 52 if(s->lchild!=NULL) //左孩子存在,则左孩子入队 53 { 54 rear++; 55 Q[rear]=s->lchild; 56 } 57 if(s->rchild!=NULL) //右孩子存在,则右孩子入队 58 { 59 rear++; 60 Q[rear]=s->rchild; 61 } 62 } 63 } 64 int main() 65 { 66 bitree *root; 67 root=CreatTree(); 68 BianLi(root); 69 return 0; 70 }
    也可以把结束提示符换到下一行输入:
  • 相关阅读:
    shell (3) 磁盘挂载
    QByteArray 内存拷贝异常
    记录QTextEdit
    QTableWidget 使用
    QT 读写xml
    远程工具长时间待机断网解决办法
    qt读写json文件
    QT 资源文件(.qrc)
    error: C1041: 无法打开程序数据库“E:ProjectQtuild-QCaculator-Desktop_Qt_5_14_1_MSVC2017_32_bit-DebugdebugQCaculator.vc.pdb”;如果要将多个 CL.EXE 写入同一个 .PDB 文件,请使用 /FS
    Vs2019+Qt5.14环境配置,安装qt visual studio tools报错。
  • 原文地址:https://www.cnblogs.com/Higgerw/p/7903917.html
Copyright © 2020-2023  润新知