def traverseDFSpreorder(self): #root, left subtree, right subtree keys = [] dfsS = Stack() dfsS.push(self.root) cur = dfsS.pop() while cur: #print("cur.key = %s"%cur.key) keys.append(cur.key) #print("%s added to keys" % str(cur.key)) if (cur.right): dfsS.push(cur.right) #print("cur.right.key = %s"%cur.right.key) if (cur.left): dfsS.push(cur.left) #print('cur.left.key = %s' % cur.left.key) cur = dfsS.pop() #print("--------------------------------") return keys
def traverseDFSinorder(self): #left subtree, root, right subtree keys = [] dfsS = Stack() dfsS.push(self.root) cur = dfsS.pop() while cur: #print("cur.key = %s"%cur.key) if ((not cur.left) or (cur.left.key in keys)): keys.append(cur.key) #print("%s added to keys" % str(cur.key)) if (cur.right): dfsS.push(cur.right) #print("cur.right.key = %s"%cur.right.key) else: dfsS.push(cur) if (cur.left and cur.left.key not in keys): dfsS.push(cur.left) #print('cur.left.key = %s' % cur.left.key) cur = dfsS.pop() #print("--------------------------------") return keys
def __init__(self): self.root = None self.current = None self.queue = Queue() self.past = Stack()