思路:根据中序和后序查树的根与节点,输出层序,可以用模拟的方式,过程中直接存储树的每一层信息
主要过程就是,根据后序找根节点,中序划分左右子树
先看后序遍历-最后遍历根节点,所以最后一个元素是根节点
然后因为中序遍历是左-根-右的顺序,所以就可以直接用找到的根节点划分出左右子树
然后在划分后的子树基础上重复以上操作
代码如下:
input()
h_list = list(input().split())
z_list = list(input().split())
zip_list = [[h_list,z_list]]
tree_l,tree_r,tree_lb,tree_rb = [],[],[],[]
tree_rows = []
#模拟建树过程,找到层序遍历每一层的元素,保存并输出
while zip_list!=[]:
re_list = []
for x in zip_list:
node_t = x[0]
node_b = x[1]
if len(node_t)>1 and len(node_b)>1:
tree_rows.append(node_t[-1])
tree_lb = node_b[0:node_b.index(node_t[-1])]
tree_l = node_t[0:len(tree_lb)]
tree_rb = node_b[len(tree_lb)+1:len(node_b)]
tree_r = node_t[len(tree_l):-1]
re_list.append([tree_l,tree_lb])
re_list.append([tree_r,tree_rb])
if len(node_t)==1 and len(node_b)==1:
tree_rows.append(node_t[0])
zip_list = re_list[:]
print(*tree_rows)