思路: 首先还原二叉树,然后根据层序遍历扫描
假设中序遍历为: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
```