- 根据前序和后序遍历构造二叉树
返回与给定的前序和后序遍历匹配的任何二叉树。
pre 和 post 遍历中的值是不同的正整数。
示例:
输入:pre = [1,2,4,5,3,6,7], post = [4,5,2,6,7,3,1]
输出:[1,2,3,4,5,6,7]
提示:
1 <= pre.length == post.length <= 30
pre[] 和 post[] 都是 1, 2, …, pre.length 的排列
每个输入保证至少有一个答案。如果有多个答案,可以返回其中一个。
思路就是根据根节点,把足有子数组分开,然后调用递归函数
因为递归函数的参数是:(前序,后序)
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
from typing import List
class Solution:
def constructFromPrePost(self, pre: List[int], post: List[int]) -> TreeNode:
# 一般树的问题优先考虑递归方法
# 传进来的参数pre是二叉树的先序遍历,post是二叉树的后序遍历
# pre[0] post[-1]是二叉树的根节点
if not pre or not post:
return None
node = TreeNode(pre[0])
if len(pre) == 1:
return TreeNode(pre[0])
i = post.index(pre[1])
node.left = self.constructFromPrePost(pre[1:i+2], post[:i+1])
node.right = self.constructFromPrePost(pre[i+2:], post[i+1:])
return node