Member Avatar for spitfire

I am getting errors when trying to compile my program, can anyone help?
Errors are
error C2143: syntax error : missing ')' before 'constant'
error C2143: syntax error : missing ';' before 'constant'
fatal error C1004: unexpected end of file found
Here is my code:

// declaration of a binary tree with pointers to left and right children// #include <assert.h> #include <stdio.h> #include <stdlib.h> #define SIZE 9 typedef int DATA; struct node { DATA dat; struct node *left; struct node *right; }; typedef struct node bNODE; typedef node *BTREE; void inorder(const BTREE root); void preorder(const BTREE root); void postorder(const BTREE root); BTREE makeTree(int a[], int i, int SIZE); BTREE new_node(); BTREE init_node(DATA dat1, BTREE par1, BTREE par2); BTREE insert(BTREE parent, BTREE root, int item); int count_nodes(BTREE root, int cnt); int count_Lnodes(BTREE root, int cnt); int *makeArray(BTREE root, int val[]); int *inorder_traversal(int i, BTREE b_tree, int *valPtr); int *order_array(int a[]); void divide_array(int a[], int b[], int c[], int SIZE); int find_center(int a[], int SIZE); int main() { // int command; BTREE b_tree; int array_of_ints[] = {5, 10, 2, 5, 7, 12, 3, 9, 8}; int val[9] = {0}; int *valPtr = 0; b_tree = makeTree)array_of_ints, 0, SIZE); printf("Tree printed 'in-order'\n"); preorder (b_tree); putchar('\n'); printf("Number of nodes = %d\n", count_nodes(b_tree, 0)); printf("Number of Leaf nodes = %d\n", count_Lnodes(b_tree, 0)); printf("Here is the array made from the tree:\n"); valPtr = makeArray(b_tree, val); return 0; } // put an array in alphabetical order int *order_array(int a[]) { int j, i, temp; int *b = a; for (i = 0; i < SIZE-1; ++i) for (j = i+1; j < SIZE; ++j) if (a[i] > a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } return b; } // put an array in alphabetical order int *order_array(int a[]) { int j, i, temp; int *b = a; for (i = 0; i < SIZE-1; ++i) for (j = i+1; j < SIZE; ++j) if (a[i] > a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } return b; } // send function a, the array to be divided, and b and c, the 2 array pointers void divide_array(int a[], int b[], int c[], int SIZE) { int i, j; for (i = 0; i < SIZE/2; ++i) b[i] = a[i]; i++; // removing middle item, the one being added for (j = 0; i < SIZE; ++i, ++j) c[j] = a[i]; } // find center of an array int find_center(int a[], int SIZE) { int i = 0, center; while (i < SIZE) ++i; center = i / 2; printf("%d.. %d .. %d\n", i, center, a[center]); return a[center]; } // create ordered binary tree using recursion, divide array, then insert center int BTREE makeTree(int a[], int i, int SIZE) { int b[SIZE] = {0}, c[SIZE] = {0}; if(SIZE == 0) return NULL; if(SIZE == 1) init_node(a[0], NULL, NULL); if(i <= SIZE) { divide_array(a, b, c, SIZE); return init_node(find_center(a, SIZE), makeTree(b, 2 * i + 1, SIZE / 2), makeTree(c, 2 * i + 2, SIZE - SIZE / 2 - 1)); } } // create array using inorder binary tree traversal and print int *makeArray(BTREE root, int val[]) { int i = 0, *valPtr; valPtr = val; valPtr = inorder_traversal(i, root, val); putchar('\n'); return valPtr; } // create array from binary tree int *inorder_traversal(int i, BTREE parent, int val[]) { int *valPtr; valPtr = val; if (parent != NULL) { inorder_traversal(i, parent->left, val); val[i] = parent->dat; printf("%d ", val[i]); ++i; inorder_traversal(i, parent->right, val); } return valPtr; } // inorder binary tree traversal and print void inorder(const BTREE parent) { if (parent != NULL) { inorder(parent->left); printf("%d ", parent->dat); inorder(parent->right); } } // preorder binary tree traversal and print void preorder(const BTREE root) { if (root != NULL) { printf("%d ", root->dat); preorder(root->left); preorder(root->right); } } // creating binary trees BTREE new_node() { return (malloc(sizeof(bNODE))); } BTREE init_node(dat1, BTREE par1, BTREE par2) { BTREE t; t = new_node(); t->dat = dat1; t->left = par1; t->right = par2; return t; } // count total number of nodes int count_nodes(BTREE root, int cnt) { if (root != NULL) { cnt = count_nodes(root->left, cnt); /* recur left */ cnt = count_nodes(root->right, ++cnt); /* recur right */ } return cnt; } // count number of leaf nodes int count_Lnodes(BTREE root, int cnt) { if (root != NULL) { cnt = count_Lnodes(root->left, cnt); cnt = count_Lnodes(root->right, cnt); if (root->left == NULL && root->right == NULL) ++cnt; } return cnt; }
Member Avatar for spitfire

The place where I am getting the errors is in

BTREE makeTree(int a[], int i, int SIZE); BTREE new_node(); BTREE init_node(DATA dat1, BTREE par1, BTREE par2); BTREE insert(BTREE parent, BTREE root, int item); 
Member Avatar for Narue

Don't use preprocessor macros unless you know how the preprocessor works. It's all to easy to forget that it's textual replacement before anything else. So this:

#define SIZE 9 BTREE makeTree(int a[], int i, int SIZE);

Becomes this:

#define SIZE 9 BTREE makeTree(int a[], int i, int 9);

Which is a syntax error. Therefore, you can't use SIZE anywhere except where you want it replaced with 9.

Member Avatar for wish_C

Hi spitfire and Narue, i am doing some work similar to this and i am try to compile your code to study it, but having the erors you are having. Can someone help me out to fix it so that i can run it and study it.
Thanks

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.