classBSTIterator:def__init__(self, root):
self.stack =[(root,2)]defrun(self):while self.stack:
n, p = self.stack.pop()if p ==2:if n.left:
self.stack.append((n,3))else:
self.stack.append((n,4))elif p ==3:
self.stack.append((n,4))
self.stack.append((n.left,2))elif p ==4:
self.stack.append((n,5))elif p ==5:if n.right:
self.stack.append((n,6))else:
self.stack.append((n,7))elif p ==6:
self.stack.append((n,7))
self.stack.append((n.right,2))elif p ==7:pass
classBSTIterator:def__init__(self, root):
self.stack =[]if root:
self.stack,append((root,2))
self.run_until_process()defrun_until_process(self):while self.stack:
n, p = self.stack.pop()if p ==2:if n.left:
self.stack.append((n,3))else:
self.stack.append((n,4))elif p ==3:
self.stack.append((n,4))
self.stack.append((n.left,2))elif p ==4:
self.stack.append((n,4))returnelif p ==5:if n.right:
self.stack.append((n,6))else:
self.stack.append((n,7))elif p ==6:
self.stack.append((n,7))
self.stack.append((n.right,2))elif p ==7:passdefnext(self):
n, p = self.stack.pop()
self.stack.append((n,5))
self.run_until_process()return n.val
defhasNext(self):return self.stack !=[]