思路: 首先还原二叉树,然后根据层序遍历扫描
假设中序遍历为:QWERTYUIOP; 前序遍历为:WERQASSDF(瞎编的)
中序为:根左右,即Q必为根节点,对应前序遍历(index)Q之前的节点在左子树(WERQ,有4个节点),之后的在右子树(ASSDF,有5个节点). 再对应中序遍历:根节点Q之后的4个节点(WERT)应该为左子树节点,再之后的5个节点(YUIOP)应该为右子树节点。之后进行递归循环
class Solution:
def solve(self , xianxu , zhongxu ):
class tree: #建立二叉树
def __init__(self,x):
self.val=x
self.left=None
self.right=None
def restore(xianxu,zhongxu):
if len(xianxu)==0: return None
else:
root=xianxu[0]
depth=zhongxu.index(root)
tmp=tree(root)
tmp.left=restore(xianxu[1:depth+1],zhongxu[:depth])
tmp.right=restore(xianxu[depth+1:],zhongxu[depth+1:])
return tmp
def levelorder(root,level):
if root==None: return
else:
sol[level-1].append(root.val)
if len(sol)==level:
sol.append([])
levelorder(root.left, level+1)
levelorder(root.right,level+1)
tmp,sol,answer=restore(xianxu,zhongxu),[[]],[]
levelorder(tmp, 1)
[answer.append(n[-1]) for n in sol[:-1]]
return answer
# write code here```

京公网安备 11010502036488号