¿Cómo obtener el nodo raíz en Stanford Parse-Tree?

Tengo este árbol de análisis aquí:

Lo que quiero es obtener todas las palabras de un padre común dado una palabra en el conjunto de hijos de un subárbol. Por ejemplo, si tomas la palabra "botellas"entonces quiero llegar"las botellas de Voss"o tal vez incluso"las botellas de agua Voss"pero no sé cómo hacer eso.

Annotation document = new Annotation(sentenceText); 
this.pipeline.annotate(document);

List<CoreMap> sentences = document.get(SentencesAnnotation.class);

for (CoreMap sentence : sentences) {

    Tree tree = sentence.get(TreeAnnotation.class);

    List<Tree> leaves = new ArrayList<>();
    leaves = tree.getLeaves(leaves);

    for (Tree leave : leaves) {         
        String compare = leave.toString().toLowerCase();            
        if(compare.equals(word) == true) {
            // Get other nodes in the same subtree
        }
    }
}

Vocaciónleave.parent() No funciona. También intentétree.parent(leave) pero eso tampoco funciona (devuelvenull)

También intenté

for (Tree leave : tree) {
    String compare = leave.toString().toLowerCase();        
    if(compare.equals(word) == true) {
        // ..
    }
}

Pero me pasa lo mismo.

public Tree parent(Tree root)
Devuelve el padre del nodo del árbol. Esta rutina atravesará un árbol (primero la profundidad) desde la raíz dada y encontrará correctamente el padre, independientemente de si la clase concreta almacena padres. Solo devolverá nulo si este nodo es el nodo raíz, o si este nodo no está contenido dentro del árbol enraizado en la raíz.

¿Cómo puedo hacer eso?#EverythingIsBrokenAllTheTime

Respuestas a la pregunta(1)

Su respuesta a la pregunta