class TreeNode():
def __init__(self,value):
self.value=value
self.left=None
self.right=None
class CreateTree():
def __init__(self):
#输入格式按照前序遍历的方式输入
self.index=0
def buildTree(self,nodes):
value = nodes[self.index]
self.index+=1
if value==0:
return None
else:
node=TreeNode(value)
node.left=self.buildTree(nodes)
node.right = self.buildTree(nodes)
return node
class Traversing():
def __init__(self):
self.values=[]
def PreOrder(self,root):
if root==None:
return
else:
self.values.append(root.value)
self.InOrder(root.left)
self.InOrder(root.right)
def PreOrderRecursive(self,root):
if root==None:
return
else:
roots=[]
roots.append(root)
while len(roots)>0:
node=roots.pop(-1)
self.values.append(node.value)
if node.right!=None:
roots.append(node.right)
if node.left!=None:
roots.append(node.left)
def InOrder(self,root):
if root==None:
return
else:
self.InOrder(root.left)
self.values.append(root.value)
self.InOrder(root.right)
def InOrderRecursive(self, root):
nodes=[]
while root!=None or len(nodes)>0:
while root!=None:
nodes.append(root)
root=root.left
if len(nodes)>0:
node=nodes.pop(-1)
self.values.append(node.value)
root=node.right
def PostOrder(self,root):
if root==None:
return
else:
self.PostOrder(root.left)
self.PostOrder(root.right)
self.values.append(root.value)
def PostOrderRecursive(self,root):
if root==None:
return
nodes=[]
nodes.append(root)
pre=None
while len(nodes)>0:
cur=nodes[-1]
if (cur.left==None and cur.right==None) or (pre!=None and (pre==cur.left or pre==cur.right)):
self.values.append(cur.value)
nodes.pop(-1)
pre=cur
else:
if cur.right!=None:
nodes.append(cur.right)
if cur.left!=None:
nodes.append(cur.left)
tree=CreateTree()
root=tree.buildTree([1,2,5,7,0,0,8,0,0,4,0,0,3,6,9,0,0,10,0,0,0])
traversing=Traversing()
traversing.PostOrderRecursive(root)
print(traversing.values)