class BinTreeNode: def __init__(self,data,left=None,right=None): self.data=data self.left=left#left self.right=right def _repr__(self): return str(self.data) class BinTree: def __init__(self): self.root=None def pre_order_traverse(self,subtree,li): if subtree is not None: li.append(subtree.data)#添加append self.pre_order_traverse(subtree.left,li)#subtree.left self.pre_order_traverse(subtree.right,li)#subtree.right def pre_order(self): li=[] self.pre_order_traverse(self.root,li)#self.root return iter(li) #非递归算法 def pre_order_traverse_no_recusion(self): p=self.root stack=[] result=[] while p is not None or stack:# p is not None or while p is not None: result.append(p.data)#append stack.append(p) p=p.left if stack: p=stack.pop()#顶端 p=p.right return result #应用实例 if __name__=="__main__": root=BinTreeNode(1) root.left=BinTreeNode(2) root.right=BinTreeNode(3) root.left.left=BinTreeNode(4) root.left.right=BinTreeNode(5) tree=BinTree() tree.root=root print(list(tree.pre_order())) print(tree.pre_order_traverse_no_recusion())
05-22
4411