标签:一个 实现 效果图 char ima read 技术 image logs

运行效果图 结构体指针实现
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 10000
int failed,n,v,ans[N];
char s[N];//保存读入结点
typedef struct Node//结点类型
{
int flag;//是否被赋值过
int number;//结点值
struct Node *left,*right;//左右子结点
}Node;
Node *root,*q[N];
Node* newnode()
{
Node *u;
u = (Node*)malloc(sizeof(Node));
if(u!=NULL)
{
u->flag = 0;
u->left = u->right = NULL;//初始时没有左右儿子
}
return u;
}
int addnode(int v,char *str)
{
int l = strlen(str);
Node *u = root;
for(int i = 0; i < l; i ++)//根结点开始往下走
{
if(str[i] == ‘L‘)
{
if(u->left == NULL)
u->left = newnode();//结点不存在,建立新结点
u = u->left ;//往左走
}
else if(str[i] == ‘R‘)
{
if(u->right == NULL)
u->right = newnode();
u = u->right ;
}
}
if(u->flag)//如果最后结束的括号也被标记为用过了,说明输入有误
failed = 1;
u->number = v;
u->flag = 1;//标记为已经用过
return 1;
}
void read_input()
{
root = newnode();//创建根结点
failed = 0;//记录输入是否有误
while(scanf("%s",s),strcmp(s,"()")!=0)
{
sscanf(&s[1],"%d",&v);//读入结点值
addnode(v,strchr(s,‘,‘)+1);//查找逗号,然后插入结点
}
return ;
}
int bfs()
{
int front = 0,rear = 1,v;
q[0] = root;//初始时只有一个根结点
n = 0;
while(front < rear)
{
Node* u = q[front++];
if(!u->flag)
return 0;//有结点没有被赋值过,表明输入有误
ans[n++] = u->number ;//增加到输出序列尾部
if(u->left != NULL)
q[rear++] = u->left ;//如果有,把左儿子放进队列
if(u->right != NULL)
q[rear++] = u->right ;//把右儿子放进队列
}
return 1;
}
int main()
{
read_input();
if(failed||!bfs())
printf("-1\n");
else
{
for(int i = 0; i < n-1; i ++)
printf("%d ",ans[i]);
printf("%d\n",ans[n-1]);
}
return 0;
}
标签:一个 实现 效果图 char ima read 技术 image logs
原文地址:http://www.cnblogs.com/chengdongni/p/7811204.html