Extraer el nodo primario y secundario del árbol de Python

Estoy usando la estructura de datos del árbol de nltk. A continuación se muestra el ejemplo nltk.Tree.

(S
  (S
    (ADVP (RB recently))
    (NP (NN someone))
    (VP
      (VBD mentioned)
      (NP (DT the) (NN word) (NN malaria))
      (PP (TO to) (NP (PRP me)))))
  (, ,)
  (CC and)
  (IN so)
  (S
    (NP
      (NP (CD one) (JJ whole) (NN flood))
      (PP (IN of) (NP (NNS memories))))
    (VP (VBD came) (S (VP (VBG pouring) (ADVP (RB back))))))
  (. .))

No conozco la estructura de datos nltk.Tree. Quiero extraer el nodo padre y el nodo super padre para cada nodo hoja, p. para 'recientemente' quiero (ADVP, RB), y para 'alguien' es (NP, NN) Este es el resultado final que quiero. La respuesta anterior utilizó la función eval () para hacerlo, lo que quiero evitar.

[('ADVP', 'RB'), ('NP', 'NN'), ('VP', 'VBD'), ('NP', 'DT'), ('NP', 'NN'), ('NP', 'NN'), ('PP', 'TO'), ('NP', 'PRP'), ('S', 'CC'), ('S', 'IN'), ('NP', 'CD'), ('NP', 'JJ'), ('NP', 'NN'), ('PP', 'IN'), ('NP', 'NNS'), ('VP', 'VBD'), ('VP', 'VBG'), ('ADVP', 'RB')]

Respuestas a la pregunta(1)

Su respuesta a la pregunta