首先要有一颗二叉树
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;
}