Untitled
unknown
c_cpp
2 years ago
1.9 kB
2
Indexable
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct __Node{ char data; struct __Node *left, *right; }Node; int isLetter(char c){ if(c >= 'A' && c <= 'Z') return 1; else if(c == '\0') return -1;// == NULL else return 0; //是加減乘除 } char s[260]; int pos = 0; void printNode(Node* head){ if(head != NULL){ int flag = 0; char l = '\0', r = '\0'; if(head->left != NULL) l = head->left->data; if(head->right != NULL) r = head->right->data; if(isLetter(l) != isLetter(r)){ if(isLetter(l) == 0 && l != head->data) flag = 1; if(isLetter(r) == 0 && r != head->data) flag = 2; } if(head->data == '/' || head->data == '*'){ if(isLetter(l) == 0 && l != head->data) flag = 1; if(isLetter(r) == 0 && r != head->data) flag = 2; if(isLetter(r) == 0 && isLetter(l) == 0 && l != head->data && r != head->data) flag = 3; } if(head->left != NULL){ if(flag == 1 || flag == 3) printf("("); printNode(head->left); if(flag == 1 || flag == 3) printf(")"); } printf("%c", head->data); if(head->right != NULL){ if(flag == 2 || flag == 3) printf("("); printNode(head->right); if(flag == 2 || flag == 3) printf(")"); } } return; } Node* prefix(){ Node* nd = (Node*)malloc(sizeof(Node)); nd->left = NULL, nd->right = NULL; nd->data = s[pos]; if(pos < strlen(s)){ if(nd->data < 'A' || nd->data > 'Z'){ pos++; nd->left = prefix(); pos++; nd->right = prefix(); } } return nd; } int main(){ scanf("%s", &s); Node* init = prefix(); printNode(init); printf("\n"); }
Editor is loading...