Untitled
unknown
c_cpp
4 years ago
1.8 kB
10
Indexable
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
typedef struct node {
int data;
struct node *left, *right;
} BTNode;
#define MAXLEN 3010
int valmax;
int values[MAXLEN];
// Print the syntax tree in preorder to debug
void printPrefix(BTNode* node)
{
if (node == NULL)
return;
printf("%d ", node->data);
printPrefix(node->left);
printPrefix(node->right);
}
// Calculate ternary expression
void calc(BTNode* node)
{
if (values[node->data]) {
if (node->left == NULL) {
printf("%d\n", values[node->data]);
return ;
}
return calc(node->left);
}
else {
if (node->left == NULL) {
printf("%d\n", values[node->data]);
return ;
}
return calc(node->right);
}
}
BTNode* makeNode(int val)
{
BTNode* node = (BTNode*)malloc(sizeof(BTNode));
valmax = val > valmax ? val : valmax;
node->data = val;
node->left = node->right = NULL;
return node;
}
// Build the syntax tree by the grammar of ternary expression
BTNode* EXPR()
{
char c;
int now;
c = getchar();
BTNode* node;
if (isdigit(c)) {
ungetc(c, stdin);
scanf("%d", &now);
node = makeNode(now);
}
c = getchar();
if (c == '?') {
node->left = EXPR();
node->right = EXPR();
}
return node;
}
int main()
{
BTNode* root = EXPR();
// printPrefix(root);
// putchar('\n');
int T;
scanf("%d", &T);
while (T--) {
for (int i = 1; i <= valmax; i++) {
scanf("%1d", &values[i]);
}
calc(root);
}
return 0;
}Editor is loading...