def pre_order_stack(self,root): #堆栈实现前序遍历(非递归) if not root: return myStack = [] node = root while myStack or node: while node: #从根节点开始,一直寻找他的左子树 print node.data, myStack.append(node) node = node.left node = myStack.pop() #while结束表示当前节点node为空,即前一个节点没有左子树了 node = node.right #开始查看它的右子树
def in_order_stack(self,root): #堆栈实现中序遍历(非递归) if not root: return myStack = [] node = root while myStack or node: #从根节点开始,一直寻找它的左子树 while node: myStack.append(node) node = node.left node = myStack.pop() print node.data, node = node.right
def post_order_stack(self, root): # 堆栈实现后序遍历(非递归) # 先遍历根节点,再遍历右子树,最后是左子树,这样就可以转化为和先序遍历一个类型了,最后只把遍历结果逆序输出就OK了。 if not root: return myStack1 = [] myStack2 = [] node = root while myStack1 or node: while node: myStack2.append(node) myStack1.append(node) node = node.right node = myStack1.pop() node = node.left while myStack2: print myStack2.pop().data,