public BoolExpTree(Vector<String> postfix)
	{
		table = new LinkedHashSet<String>();
		Stack<ExpNode> stack = new Stack<ExpNode>();
		for(String token : postfix)
		{
			// if is an operator pop the required number of operands and push a new CompoundNode with the operands as its children
			if(token.equals(BooleanOperators.NOT))
			{
				ExpNode node = CompoundNode.make(token, stack.pop(), null);
				stack.push(node);
			}
			else if(token.equals(BooleanOperators.AND) || 
				    token.equals(BooleanOperators.OR) ||
			    	token.equals(BooleanOperators.IMPLIES))
			{
				ExpNode right = stack.pop();
				ExpNode left = stack.pop();
				ExpNode node = CompoundNode.make(token,left, right);
				stack.push(node);
			}
			// if is an ID push a new Node to the stack;
			else
			{
				String boolToken = token.toLowerCase();
				if (boolToken.equals("true") || boolToken.equals("false"))
					stack.push(new ConstantNode(token));
				else
				{
					stack.push(new IdentifierNode(token));
					table.add(token);
				}
			}
		}
		root = stack.pop();
	}