class Node: def __init__(self,value= None ,left=None,right=None): self.value = value self.left = left self.right = right
def preTraverse_1(root): """非递归""" ret = [] stack = [] while root or stack: while root: ret.append(root.value) stack.append(root) root=root.left if stack: t = stack.pop() root=t.right return ret
def midTraverse_1(root): '''非递归''' ret = [] stack=[] while root or stack: while root: stack.append(root) root=root.left if stack: t = stack.pop() ret.append(t.value) root=t.right return ret
def afterTraverse_1(root): """ 非递归 思路:后续遍历根结点,先遍历左子树,然后遍历右子树, 此时反过来考虑:先遍历根结点,然后遍历右子树,最后是左子树,这样就可以转化为和先序遍历一个类型了, 最后只把遍历结果逆序输出就ok了, 而先序遍历是之前写过并且比较好理解的。""" ret = [] stack=[] while root or stack: while root: ret.append(root.value) stack.append(root) root = root.right if stack: t = stack.pop() root = t.left ret.reverse() return ret
if __name__=='__main__': root=Node('D',Node('B',Node('A'),Node('C')),Node('E',right=Node('G',left=Node('F')))) print ('后序遍历') print afterTraverse_1(root)