2013-04-28 5 views
0

프로그래밍 클래스의 숙제를 위해 C에서 이진 검색 트리를 구현하는 중입니다. 이 많은 코드를 작성하고 Visual Studio 2010에서 컴파일하면 많은 오류가 발생합니다.구문 이진 탐색 트리 (C) 구현시 오류

비슷한 오류가 발생하여 문제가 무엇인지 파악하기에 충분하지 않은 사람들을 온라인으로 살펴 보았습니다.

/*This code will implement a binary search tree based on 20 
user-inputed integers. It will then implement a search, 
insert, delete, and traverse function. */ 

#include <stdio.h> 
#include <stdlib.h> 
#define ARRSIZE 20 

/*------ TYPE DEFINITIONS ------*/ 

typedef struct node 
{ 
    int data; 
    node* left; 
    node* right; 
}; 

typedef struct tree 
{ 
    int count; 
    node* root; 
}; 

/*------ FUNCTION DECLARTATIONS ------*/ 

void InitializeTree (tree* ptree); 
int insert (int data, tree* ptree); 
void place (node* root, node* new_node); 

/*------ MAIN FUNCTION ------*/ 

int main (void) 
{ 
    int i, check, arr[ARRSIZE]; 
    tree BST; 

    InitializeTree(&BST); 

    printf("Enter 20 integers for a list.\n"); 

    for(i=0; i<ARRSIZE; i++) 
    { 
     printf("Integer %d:\n", i+1); 
     scanf("%d", &arr[i]); 
     check = insert(arr[i], &BST); 
     if(check == 0) 
     { 
      printf("Error in creating node.\n"); 
      exit(1); 
     } 
    } 

    return 0; 
} 

/* 
* 
* ADDITIONAL FUNCTIONS 
* 
*/ 

/*------ CREATION FUNCTIONS ------*/ 

void InitializeTree (tree* ptree) 
{ 
    ptree = (tree*) malloc(sizeof(tree)); 
    ptree->count = 0; 
} 

int insert (int data, tree* ptree) 
{ 
    node* new_node; 

    new_node = (node*) malloc(sizeof(node)); 
    if(new_node == NULL) 
    { 
     printf("Couldn't create a node.\n"); 
     return 0; 
    } 
     new_node->data = data; 

    ptree->count++; 

    if(ptree->root == NULL) 
    { 
     ptree->root = new_node; 
    } 

    else 
    { 
     place(ptree->root, new_node); 
    } 
    return 1; 

} 

void place (node* root, node* new_node) 
{ 
    if(new_node->data < root->data) 
    { 
     if(root->left == NULL) 
     { 
      root->left = new_node; 
     } 
     else 
     { 
      place(root->left, new_node); 
     } 
    } 
    else 
    { 
     if(root->right == NULL) 
     { 
      root->right = new_node; 
     } 
     else 
     { 
     place(root->right, new_node; 
     } 
    } 
} 

오류는 다음과 같이 : 여기

코드입니다

1>bin-tree.c(16): error C2061: syntax error : identifier 'node' 
1>bin-tree.c(17): error C2143: syntax error : missing '{' before '*' 
1>bin-tree.c(18): error C2059: syntax error : '}' 
1>bin-tree.c(23): error C2061: syntax error : identifier 'node' 
1>bin-tree.c(24): error C2059: syntax error : '}' 
1>bin-tree.c(28): error C2143: syntax error : missing ')' before '*' 
1>bin-tree.c(28): error C2143: syntax error : missing '{' before '*' 
1>bin-tree.c(28): error C2059: syntax error : ')' 
1>bin-tree.c(29): error C2143: syntax error : missing ')' before '*' 
1>bin-tree.c(29): error C2081: 'tree' : name in formal parameter list illegal 
1>bin-tree.c(29): error C2143: syntax error : missing '{' before '*' 
1>bin-tree.c(29): error C2059: syntax error : ')' 
1>bin-tree.c(30): error C2143: syntax error : missing ')' before '*' 
1>bin-tree.c(30): error C2143: syntax error : missing '{' before '*' 
1>bin-tree.c(30): error C2143: syntax error : missing ';' before '*' 
1>bin-tree.c(30): error C2059: syntax error : ')' 
1>bin-tree.c(37): error C2065: 'tree' : undeclared identifier 
1>bin-tree.c(37): error C2146: syntax error : missing ';' before identifier 'BST' 
1>bin-tree.c(37): error C2065: 'BST' : undeclared identifier 
1>bin-tree.c(39): warning C4013: 'InitializeTree' undefined; assuming extern returning int 
1>bin-tree.c(39): error C2065: 'BST' : undeclared identifier 
1>bin-tree.c(47): warning C4013: 'insert' undefined; assuming extern returning int 
1>bin-tree.c(47): error C2065: 'BST' : undeclared identifier 
1>bin-tree.c(66): error C2143: syntax error : missing ')' before '*' 
1>bin-tree.c(66): error C2143: syntax error : missing '{' before '*' 
1>bin-tree.c(66): error C2059: syntax error : ')' 
1>bin-tree.c(67): error C2054: expected '(' to follow 'ptree' 
1>bin-tree.c(72): error C2143: syntax error : missing ')' before '*' 
1>bin-tree.c(72): error C2081: 'tree' : name in formal parameter list illegal 
1>bin-tree.c(72): error C2143: syntax error : missing '{' before '*' 
1>bin-tree.c(72): error C2059: syntax error : ')' 
1>bin-tree.c(73): error C2054: expected '(' to follow 'ptree' 
1>bin-tree.c(99): error C2143: syntax error : missing ')' before '*' 
1>bin-tree.c(99): error C2143: syntax error : missing '{' before '*' 
1>bin-tree.c(99): error C2143: syntax error : missing ';' before '*' 
1>bin-tree.c(99): error C2059: syntax error : ')' 
1>bin-tree.c(100): error C2054: expected '(' to follow 'new_node' 

사람은 수많은 오류의 원인이 될 수있는 무엇을 알고 있나요?

typedef struct node 
{ 
    int data; 
    node* left; 
    node* right; 
}; 

typedef struct tree 
{ 
    int count; 
    node* root; 
}; 

에 :

답변

4
은에서 형식 정의를 변경

또한
typedef struct node 
{ 
    int data; 
    struct node* left; // <<< 
    struct node* right; // <<< 
} node;     // <<< 

typedef struct tree 
{ 
    int count; 
    node* root; 
} tree;     // <<< 

@Binayaka에 의해 언급 된 바와 같이, 당신이 누락 된 브래킷이 - 변경

place(root->right, new_node; 

에 :

place(root->right, new_node); 
+0

나는했으나 여전히 같은 오류가 발생합니다. – Zelmec

+0

* 모든 변경 사항을 * 확실하게 작성 했습니까? 대답에서 강조 표시 할 것입니다 ... –

+2

원본 코드 118 행에 누락 된 괄호가 있습니다. 주어진 대답과 함께 변경하십시오. –