Advertisement
Guest User

Untitled

a guest
Jul 24th, 2014
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.32 KB | None | 0 0
  1. import java.util.ArrayList;
  2.  
  3. public class MyExpressionTree {
  4. private MyNode<Character> r;
  5. private MyNode<MyExpressionTree> root;
  6. private MyNode<MyExpressionTree> left;
  7. private MyNode<MyExpressionTree> right;
  8. private ArrayList<Character> expression;
  9.  
  10. public MyExpressionTree(ArrayList<Character> e) {
  11. expression = e;
  12. }
  13.  
  14. private MyExpressionTree(MyNode<Character> x) {
  15. r = x;
  16. }
  17.  
  18. private MyExpressionTree(MyNode<MyExpressionTree> a,
  19. MyNode<MyExpressionTree> b, MyNode<MyExpressionTree> c) {
  20. root = a;
  21. left = b;
  22. right = c;
  23. }
  24.  
  25. public void run() {
  26. buildTree();
  27. }
  28.  
  29. public void buildTree() {
  30. MyStack<MyExpressionTree> m = new MyStack<MyExpressionTree>();
  31. for (int i = 0; i < expression.size(); i++) {
  32. if (!isOperator(expression.get(i))) {
  33. MyNode<Character> node = new MyNode<Character>(
  34. expression.get(i));
  35. m.push(new MyExpressionTree(node));
  36. } else {
  37. MyNode<MyExpressionTree> T1 = new MyNode<MyExpressionTree>(
  38. m.pop());
  39. MyNode<MyExpressionTree> T2 = new MyNode<MyExpressionTree>(
  40. m.pop());
  41. MyNode<Character> node = new MyNode<Character>(
  42. expression.get(i));
  43. MyExpressionTree r = new MyExpressionTree(node);
  44. MyNode<MyExpressionTree> newRoot = new MyNode<MyExpressionTree>(
  45. r);
  46. MyExpressionTree tree = new MyExpressionTree(newRoot, T2, T1);
  47. m.push(tree);
  48. }
  49. }
  50. }
  51.  
  52. public boolean isOperator(char x) {
  53. if (x == '+' || x == '-' || x == '*' || x == '/')
  54. return true;
  55. else
  56. return false;
  57. }
  58.  
  59. public boolean isLeaf(MyNode<MyExpressionTree> t) {
  60. if (t.getLeftChild() == null && t.getRightChild() == null)
  61. return true;
  62. else
  63. return false;
  64. }
  65.  
  66. public int evaluate(MyNode<MyExpressionTree> n){
  67. if (n != null) {
  68. if (isLeaf(n))
  69. return Integer.parseInt(n.getElement().toString());
  70. else {
  71. int leftChild = evaluate(n.getLeftChild());
  72. int rightChild = evaluate(n.getRightChild());
  73. char root = n.getElement().toString().charAt(0);
  74. return calculate(leftChild, root, rightChild);
  75. }
  76. }
  77. return 0;
  78. }
  79. public int calculate(int a, char b, int c) {
  80. int result = 0;
  81. if (b == '+') {
  82. result = a + c;
  83. } else if (b == '-') {
  84. result = a -c;
  85. } else if (b == '*') {
  86. result = a * c;
  87. } else {
  88. result = a / c;
  89. }
  90. return result;
  91. }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement