Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.45 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <cstdio>
  4.  
  5. using namespace std;
  6.  
  7. typedef struct Node{
  8.     char ch;
  9.     struct Node *left;
  10.     struct Node *right;
  11. }Node;
  12.  
  13. Node* creattree(const string expr, int index);
  14. void showPreorder(const Node* root);
  15. int compute(const Node* root);
  16. Node* freetree(Node* root);
  17. int main() {
  18.     freopen("arithmatic.txt", "r", stdin);
  19.     string expr;
  20.     while (cin >> expr) {
  21.         Node *root=NULL;
  22.         root = creattree(expr, 0);
  23.         showPreorder(root);
  24.         cout << endl << compute(root) << endl;
  25.         root = freetree(root);
  26.     }
  27.     return 0;
  28. }
  29.  
  30. Node* creattree(const string expr, int index) {
  31.     if (index >= expr.size())
  32.         return NULL;
  33.     Node *root=NULL;
  34.     root = new Node;
  35.     root->ch = expr[index];
  36.     if (expr[index] == '*' || expr[index] == '+') {
  37.         root->left = creattree(expr, index+1);
  38.         root->right = creattree(expr, index+2);
  39.     } else {
  40.         root->left = NULL;
  41.         root->right = NULL;
  42.     }
  43.     return root;
  44. }
  45.  
  46. void showPreorder(const Node* root) {
  47.     if (root) {
  48.         cout << root->ch;
  49.         showPreorder(root->left);
  50.         showPreorder(root->right);
  51.     }
  52. }
  53.  
  54. Node* freetree(Node* root) {
  55.     if (root) {
  56.         freetree(root->left);
  57.         freetree(root->right);
  58.         free(root);
  59.         root = nullptr;
  60.     }
  61.     return root;
  62. }
  63.  
  64.  
  65. int compute(const Node* root) {
  66.     if (root->ch == '+') {
  67.         return compute(root->left) + compute(root->right);
  68.     }
  69.     else if (root->ch == '*') {
  70.         return compute(root->left) * compute(root->right);
  71.     }
  72.     else
  73.         return root->ch - '0';
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement