1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>
#include <stdlib.h>
 
typedef struct TreeNode {
    int data;
    struct TreeNode *left, *right;
} TreeNode;
//             +
//         *         +
//    1       4   16  25
TreeNode n1 = { 1,  NULLNULL };
TreeNode n2 = { 4,  NULL,  NULL };
TreeNode n3 = { '*',  &n1,  &n2 };
TreeNode n4 = { 16NULLNULL };
TreeNode n5 = { 25NULLNULL };
TreeNode n6 = { '+'&n4,  &n5 };
TreeNode n7 = { '+'&n3,  &n6 };
TreeNode *exp = &n7;
 
// ¼ö½Ä °è»ê ÇÔ¼ö
int evaluate(TreeNode *root)
{
    if (root == NULL)
        return 0;
    if (root->left == NULL && root->right == NULL)
        return root->data;
    else {
        int op1 = evaluate(root->left);
        int op2 = evaluate(root->right);
        printf("%d %c %dÀ» °è»êÇÕ´Ï´Ù.\n", op1, root->data, op2);
        switch (root->data) {
        case '+':
            return op1 + op2;
        case '-':
            return op1 - op2;
        case '*':
            return op1 * op2;
        case '/':
            return op1 / op2;
        }
    }
    return 0;
}
// 
int main(void)
{
    printf("¼ö½ÄÀÇ °ªÀº %dÀÔ´Ï´Ù. \n", evaluate(exp));
    return 0;
}
cs