int creatTree(char * str_tree, int position, Node ** head) { int i, curser=0, j, number, END=1; Node * left, * right; for(i=position; str_tree[i]!='\0'; i++) { if(str_tree[i] == '(' && !curser) { curser++; } else if(str_tree[i] == ')') { if(END) { *head = NULL; } return i; } else if(str_tree[i] == '(') { if(curser == 1) { i = creatTree(str_tree, i, &left); (*head) -> leftNode = left; curser++; } else if(curser == 2) { i = creatTree(str_tree, i, &right); (*head) -> rightNode = right; } } else { END = 0; for(number=0; str_tree[i]!=')'&&str_tree[i]!='('; i++) { number *= 10; number += str_tree[i]-48; } i--; (*head) = (Node*)malloc(sizeof(Node)); (*head) -> value = number; (*head) -> leftNode = NULL; (*head) -> rightNode = NULL; } } return -1; }
int main() { struct timespec start, end; TreeNode *root = NULL; root = creatTree(root); /* assert - bounds checking */ assert(root != NULL && "Root is null!"); /* compute the execution time */ clock_gettime(CLOCK_REALTIME, &start); int i; for (i = 0; i < 10000; ++i) { flatten(root); } clock_gettime(CLOCK_REALTIME, &end); double cpu_time = diff_in_second(start, end); printTree(root); printf("execution time: %lf sec\n", cpu_time); return 0; }
int main() { int based_sum; char str_tree[501] = {'\0'}; char temp; Node * head; while(scanf("%d", &based_sum)!=EOF) { int i=0, left=0, right=0; while(scanf("%c",&temp)) { if(temp == '\n' || temp == '\t' || temp == ' '|| c==9 || c==10) continue; else { str_tree[i++] = temp; if(temp == '(') left++; else if(temp == ')') right++; if(left == right) break; } } if(str_tree[1] == ')') { printf("no\n"); continue; } creatTree(str_tree, 0, &head); // printTree(head, 0); if(isSum(head, based_sum)) printf("yes\n"); else printf("no\n"); for(i=0; i<501 && str_tree[i]!='\0'; i++) { str_tree[i] = '\0'; } } return 0; }
int main() { tree* root = NULL; root = creatTree(); printf("Min Depth = %d\n",minDepth(root)); return 0; }