13830-AddNecessaryParentheses
unknown
c_cpp
2 years ago
2.1 kB
3
Indexable
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct _Node { char data; struct _Node *left, *right; } BTNode; int pos, l; char expr[230]; BTNode *Create_Node(char c); BTNode *Create_Tree(); void Show_Tree(BTNode *node); void Free_Node(BTNode *node); int main(void) { BTNode *head; scanf("%s", expr); l = strlen(expr); head = Create_Tree(); Show_Tree(head); Free_Node(head); puts(""); } BTNode *Create_Node(char c) { BTNode *new = malloc(sizeof(BTNode)); new->data = c; new->left = NULL; new->right = NULL; return new; } BTNode *Create_Tree() { char c; BTNode *node = NULL; if (pos < l) { c = expr[pos++]; node = Create_Node(c); if (!(c >= 'A' && c <= 'Z')) { node->left = Create_Tree(); node->right = Create_Tree(); } } return node; } void Show_Tree(BTNode *node) { if (node != NULL) { BTNode *right = node->right; BTNode *left = node->left; char c = node->data; if (left) { if ((c == '*' || c == '/') && (left->data == '+' || left->data == '-')) { putchar('('); Show_Tree(left); putchar(')'); } else Show_Tree(left); } putchar(c); if (right) { if ((c == '-' || c == '*') && (right->data == '+' || right->data == '-')) { putchar('('); Show_Tree(right); putchar(')'); } else if (c == '/' && (right->data == '+' || right->data == '-' || right->data == '*' || right->data == '/')) { putchar('('); Show_Tree(right); putchar(')'); } else Show_Tree(right); } } } void Free_Node(BTNode *node) { if (node != NULL) { Free_Node(node->left); Free_Node(node->right); free(node); } }
Editor is loading...