Esempio n. 1
0
  public void convertTree() {
    int L = labelVocab.size();
    this.treeRoot = new TreeNode<TreeNode, Integer>(0, 0, L, null);
    TreeNode<TreeNode, Integer>[] treeNodes = new TreeNode[L + 1];
    Queue<GraphNode<Integer>> queue = new LinkedList<GraphNode<Integer>>();
    queue.add(this.root);
    treeNodes[L] = this.treeRoot;
    while (!queue.isEmpty()) {
      GraphNode<Integer> mstNode = queue.poll();
      TreeNode<TreeNode, Integer> node = treeNodes[mstNode.getId()];

      if (tree.hasOutEdges(mstNode)) {
        for (GraphEdge edge : tree.getOutEdges(mstNode)) {
          GraphNode<Integer> mstChild = edge.getTarget();
          int labelIdx = mstChild.getId();
          TreeNode<TreeNode, Integer> childNode =
              new TreeNode<TreeNode, Integer>(
                  node.getNextChildIndex(), node.getLevel() + 1, labelIdx, node);
          node.addChild(childNode.getIndex(), childNode);
          treeNodes[labelIdx] = childNode;
          queue.add(mstChild);
        }
      }
    }
  }