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,