public Tree<String> traverseAnnotatedTree(Tree<String> tree) {
		if (tree.isLeaf()) {
			return tree;
		}

		List<Tree<String>> childrenList = tree.getChildren();

		if (childrenList.size() == 1) {
			Tree<String> child = childrenList.get(0);
			String[] params0 = new String[4];
			params0[0] = tree.getLabel();
			params0[1] = child.getLabel();
			params0[2] = "1";
			params0[3] = String.valueOf(grammar.getUnScore(tree.getLabel(),
					child.getLabel()));

			if (child.isLeaf()) {
				params0[2] = "lexicon";
				params0[3] = String.valueOf(Math.log(lexicon.scoreTagging(
						child.getLabel(), tree.getLabel())));
			}

			word_tokens.add(params0);
			traverseAnnotatedTree(child);
		} else if (childrenList.size() == 2) {
			Tree<String> leftChild = childrenList.get(0);
			Tree<String> rightChild = childrenList.get(1);

			String[] params1 = new String[4];
			params1[0] = tree.getLabel();
			params1[1] = leftChild.getLabel();
			params1[2] = "2";
			params1[3] = String.valueOf(grammar.getBiScore(tree.getLabel(),
					leftChild.getLabel(), rightChild.getLabel()));

			word_tokens.add(params1);
			traverseAnnotatedTree(leftChild);

			String[] params2 = new String[4];
			params2[0] = tree.getLabel();
			params2[1] = rightChild.getLabel();
			params2[2] = "2";
			params2[3] = "0";

			word_tokens.add(params2);
			traverseAnnotatedTree(rightChild);
		}
		return tree;
	}