You are on page 1of 7

#include <stdio.

h>

#include <iostream>

#include <string.h>

#include <stdlib.h>

typedef struct Node

int ID;

char name[128];

char school[128];

struct Node* leftChild;

struct Node* rightChild;

Node;

Node* makeNode ( int ID, char* name, char* school)

Node* p = ( Node* ) malloc ( sizeof ( Node ) );

p -> ID = ID;

strcpy ( p -> name, name );

strcpy ( p -> school, school );

return p;

Node* readline ( char* line )

// printf ( “%s”, line );

int n = strlen ( line );

const char s[2] = “$”;

char* token;

token = strtok ( line, s );

int ID = atoi ( token );

char* name [128];


char* school[128];

int iDOfLeft = -1;

int idOfRight = -1;

// printf ( “%d”, ID );

int i = 1;

while ( token != NULL )

token = strtok ( NULL, s ); // Lay ra cac xau con con lai

// printf ( “%s”, token );

if ( strcpy ( token, “#” ) == 0 )

break;

if ( i == 1 )

int lengthOfName = strlen ( token );

name = ( char* ) malloc ( lengthOfName*sizeof ( char ) );

strcpy ( name, token );

else if ( i == 2 )

int lengthOfName = strlen ( token );

name = ( char* ) malloc ( lengthOfName*sizeof ( char ) );

strcpy ( name, token );

else if ( i == 3 )

else if ( i == 4 )

iDOfLeft = atoi ( token );

case 4:

iDOfRight = atoi ( token );


}

i++;

return makeNode ( -1, name, school, idLeft, idRight );

int main()

int N;

scanf ( “%d”, &N );

int i = 0;

while ( i < N )

char* line;

scanf ( “%s”, line );

i ++;

return 0;

}
REMAKE:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

typedef struct Node{

int ID;

char name[128];

char school[128];

int iDOfLeft, iDOfRight;

struct Node* leftChild;

struct Node* rightChild;

} Node;

Node* makeNode(int ID, char* name, char* school, int idLeft, int idRight){

Node* p = (Node*)malloc(sizeof(Node));

p->ID = ID;

strcpy(p->name, name);

strcpy(p->school, school);

p->iDOfRight = -1;

p->iDOfLeft = -1;

return p;

Node* root;

Node* readLine(char* line){

//printf("!%s!", line);
int n = strlen(line);

const char s[2] = "$";

const char stop[2]= "#";

char* token;

token = strtok(line, s);

int ID ;

int iDOfLeft = -1, iDOfRight = -1;

//printf("%d ", ID);

int i = 0;

char* name;

char* school;

while(token != NULL){

if(i == 0){

ID = atoi(token);

else if(i == 1){

int lengthOfName = strlen(token);

name = (char*)malloc(lengthOfName*sizeof(char));

strcpy(name, token);

else if(i == 2){

int lengthOfSc = strlen(token);

school = (char*)malloc(lengthOfSc*sizeof(char));

strcpy(school, token);

else if(i == 3){

iDOfLeft = atoi(token);

}
else if(i == 4){

iDOfRight = atoi(token);

i++;

token = strtok(NULL, s);//Lấy ra các xâu con còn lại

#printf("\t%d-%s-%s-%d-%d\n", ID, name, school, iDOfLeft, iDOfRight);

return makeNode(ID, name, school, iDOfLeft, iDOfRight);

void findFather(Node* p){

//tìm ra nút cha của p, tức nút mà có iDOfLeft hoặc IDOfRight

//bằng p->ID

int main()

int N;

scanf("%d", &N);

int i = 0;

while(i < N){

char line[128];

scanf("%s", line);

if(root == NULL){

root = readLine(line);

else{

Node* p = readLine(line);

findFather(p);//hàm này tìm ra nút cha của nút p và gán p làm con trái
//hoặc con phải của nút cha đó.

//printf("!%s!", line);

i++;

return 0;

You might also like