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); } } } }