It seems to me you are not resetting self.dialog_tree in the first code snippet, so from where ever you call the uppermost self.input, if not self.dialogtree will never be true again after the first time.
self.dialog_tree
self.input
if not self.dialogtree