from queue import Queue
class solve:
def __init__(self,val):
self.val=val
self.left=[]
self.right=[]
def rebuild(first,me):
if len(first)==1:
root = solve(first[0])
return root
elif len(first)==0:
return
for i in range(len(me)):
if me[i]==first[0]:
ind=i
break
root =solve(first[0])
root.left=rebuild(first[1:ind+1],me[0:ind])
root.right=rebuild(first[ind+1:],me[ind+1:])
return root
def travel_first(root):
if root:#递归记得写出口条件
print(root.val,end='')
travel_first(root.left)
travel_first(root.right)
def travel_me(root):
if root:#递归记得写出口条件
travel_me(root.left)
print(root.val,end='')
travel_me(root.right)
def travel_last(root):
if root:#递归记得写出口条件
travel_last(root.left)
travel_last(root.right)
print(root.val,end='')
def travel_cycle(root):#若孩子存在,则压入队列
que=Queue()
que.put(root)
while True:
if que.empty(): #empty后面要加()
break
root = que.get()
print(root.val,end='')
if root.left:
que.put(root.left)
if root.right:
que.put(root.right)
first='12473568'
me='47215386'
root=rebuild(first,me)
print('先序遍历')
travel_first(root)
print()
print('中序遍历')
travel_me(root)
print()
print('后序遍历')
travel_last(root)
print()
print('循环遍历')
travel_cycle(root)
结果为:
先序遍历
12473568
中序遍历
47215386
后序遍历
74258631
循环遍历
12345678