二叉树的层次遍历

来源:互联网 发布:手机降温的软件 编辑:程序博客网 时间:2024/04/28 11:24

首先要有一颗二叉树

typedef struct node{    int flag;//是否被赋值过    int value;//结点的值    struct node *left,*right;//左右孩子}Node;Node* root;//根结点
每次加入结点都要做申请新结点的操作

Node* newnode(){    Node* n=(Node*) malloc(sizeof(Node));    if(n!=0)//申请成功    {        n->flag=0;//初始化,还没被赋值过        n->left=n->right=0;//初始化,本来没有左右孩子    }    return n;}
然后要构造二叉树了

void addnode(int value,char *s){    int len=strlen(s);    Node* n=root;    n->flag=1;    for(int i=0;i<len;i++)    {        if(s[i]=='L')//如果是L,则加上左子树        {            if(n->left==0)n->left=newnode();//新结点            n=n->left;//把新结点连上        }else if(s[i]=='R')        {            if(n->right==0)n->right=newnode();            n=n->right;        }        n->value=value;//赋值        n->flag=1;//表示已经赋值过了    }}
层次遍历,就是bfs啦~

int bfs(){    int front=0,rear=1;    Node*q[10010];    q[0]=root;    while(front<rear)    {        Node* n=q[front++];        if(!n->flag)return 0;        ans[cnt++]=(n->value);        //printf("YES");        if(n->left!=0)q[rear++]=n->left;        if(n->right!=0)q[rear++]=n->right;    }    return 1;}




0 0