Traverse

by vzufelt

HTML

<h3>
  Assignment 12
</h3>
<br/> X value:
<input type="text" id="x" /> Y value:
<input type="text" id="y" />
<br/>
<input type='button' value='Enter' onclick='calc();' />
<br/>
<br/>
<div id='output'>
</div>

JavaScript

this.calc = function() {
  var output = document.getElementById('output');
  var x = document.getElementById('x').value.trim();
  var y = document.getElementById('y').value.trim();
  
  x = parseFloat(x);
  y = parseFloat(y);
  if (isNaN(x) || isNaN(y)) {
    output.innerHTML = "Enter a number for X and Y.";
    return;
  }
  var leaf3 = new leaf(3);
  var leafx = new leaf("x");
  var leaf5 = new leaf(5);
  var leafy = new leaf("y");
  var mult = new node("*", leaf5, leafy);
  var add = new node("+", leafx, mult);
  var mult2 = new node("*", leaf3, add);

  var value = {};
  value["x"] = x;
  value["y"] = y;
  var result = mult2.traverse(value);
  output.innerHTML = "X = " + x + ", Y = " + y + ", Output = " + result;
};
function leaf(value) {
  this.value = value;
}
function node(key, left, right) {
  this.key = key;
  this.left = left;
  this.right = right;
}
leaf.prototype.traverse = function(value) {
  if (isNaN(this.value)) {
    return value[this.value];
  }
  return this.value;
};
node.prototype.traverse = function(value) {
  var left = this.left.traverse(value);
  var right = this.right.traverse(value);
  var key = this.key;
  if (key == '+') {
    return left + right;
  }
  if (key == "-") {
    return left - right;
  }
  if (key == '*') {
    return left * right;
  }
  if (key == '/') {
    return left / right;
  }
  return 0;
};