第六章 二叉树【算法入门经典】【结构体指针】

运行效果图 结构体指针实现

#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;
}

  

时间: 2024-10-24 11:21:19

第六章 二叉树【算法入门经典】【结构体指针】的相关文章

算法入门经典第六章 例题6-14 Abbott的复仇(Abbott&#39;s Revenge)BFS算法实现

Sample Input 3 1 N 3 3 1 1 WL NR * 1 2 WLF NR ER * 1 3 NL ER * 2 1 SL WR NF * 2 2 SL WF ELF * 2 3 SFR EL * 0 Sample Output (3,1) (2,1) (1,1) (1,2) (2,2) (2,3) (1,3) (1,2) (1,1) (2,1) (2,2) (1,2) (1,3) (2,3) (3,3) 析 题目的大意是,输入起点,离开起点时的朝向和终点,求一条最短路. 每一个

Swift入门篇-结构体

前面主要是介绍swift语言中基本类型的用法,今天给大家介绍的是swift的结构体的用法,swift中结构体的用法和其他语言的用法,还有不太一样,不过您多敲几遍,就可以理解结构体,结构体在ios开发中是灰常重要的一部分,如果您很好的掌握结构体,在后面ios开发中,会理解的更加清楚. 一:结构体声明 格式: struct 结构体名 { } 说明: 1: struct 是定义结构体的关键字 例子 /* 1:struct 是结构体的关键字 2:student 结构体名称 3:student() 创建一

C语言学习入门 (八) 结构体和枚举

结构体 它允许内部的元素是不同类型的 结构体的定义 //结构体类型: struct Person { char name[20]; //char *name; int age; float weight; }; //定义一个结构体变量,定义变量时才分配存储空间 structPerson person;    //与类型定义一起使用 struct Student {  //结构体类型与变量同时定义 char *name; int age; } stu; struct {  //省略类型,结构体变量

c++入门之结构体初步

结构体实际上是一种数据结构的雏形,对结构体的灵活使用很多时候可以带来很多便利.下面给出一个关于结构体的程序: 1 #include "iostream" 2 # include "cmath" 3 struct polar 4 { 5 double distance; 6 double angle; 7 }; 8 struct rect 9 { 10 double x; 11 double y; 12 }; 13 void rect_to_polar(rect*pa

结构体指针

结构体与指针 1.结构体指针的数值为某个结构体的内存空间的地址,从而指针指向某个结构体. 2.结构体指针的初始值为空(0),不指向任何结构体. 3.malloc操作:创建一个新的内存空间(从内存中选择一个内存空间存储结构体),p指向这个结构体,p的值为这个结构体的内存空间的地址. 4.结构体指针的赋值:一个结构体指针的数值等于另外一个结构体指针的数值,从而两个结构体指针指向相同的结构体.当对某个结构体进行访问时,选择的结构体指针只要满足该结构体指针指向这个结构体即可,即可以有很多种选择. 5.当

C语言 结构体指针赋值 incompatible types when assigning to type &#39;char[20]&#39; from type &#39;char *&#39;

strcpy(pstudent->name, "guo zhao wei "); 为什么错误,该怎么写,(红色行) 追问 为什么不能直接赋值啊, 追答 用char nnnn[20]定义的,用strcpy 用char *ppp定义的,用=来赋值 C语言 结构体指针赋值 incompatible types when assigning to type 'char[20]' from type 'char *'

(C)struct结构体指针

结构体指针 指针结构与指针的关系亦有两重:其一是在定义结构时,将指针作为结构中的一个成员:其二是指向结构的指针(称为结构指针). 前者同一般的结构成员一样可直接进行访问,后者是本节讨论的重点. 结构指针说明的一般形式是: struct (结构类型名称) * (结构指针变量名);例如:struct date * pdate, today;说明了两个变量,一个是指向结构date的结构指针pdate,today是一个date结构变量. 语句: struct date{ int year; int mo

c语言中结构体指针

1.指向结构体的指针变量: C 语言中->是一个整体,它是用于指向结构体,假设我们在程序中定义了一个结构体,然后声明一个指针变量指向这个结构体,那么我们要用指针取出结构体中的数据,就要用到指向运算符"->". 举例说明: struct SunLL { int a; int b; int c; }; struct SunLL  * p;               //定义结构体指针 struct SunLL A = {1,2,3};    //定义一个SunLL类型的变量A

C语言结构体,C语言结构体指针,java对象引用,传值,传地址,传引用

C语言结构体,C语言结构体指针,java对象引用,传值,传地址,传引用 传值 把实参的值赋值给行参 那么对行参的修改,不会影响实参的值 传地址 传值的一种特殊方式,只是他传递的是地址,不是普通的如int 那么传地址以后,实参和行参都指向同一个对象 传引用 真正的以地址的方式传递参数 传递以后,行参和实参都是同一个对象,只是他们名字不同而已 对行参的修改将影响实参的值 所谓变量是内存地址的一个抽象名字,在静态编译的程序中,所有变量名都会在编译时转换成内存地址,机器不知道变量名,只知道地址. C 语