[LC]105.从前序与中序遍历序列构造二叉树
题目
给定两个整数数组 preorder
和 inorder
,其中 preorder
是二叉树的先序遍历, inorder
是同一棵树的中序遍历,请构造二叉树并返回其根节点。
分析
先序序列的第一个元素是树的根,在中序序列中定位到这个元素,该元素的左边都是左子树中的结点,右边都是右子树中的结点,据此,可以将问题规约为两个更小的子问题,递归求解。
代码
1 |
|
时间复杂度
可以得到平均时间复杂度的递推方程$A(n) = \frac{2}{n} \Sigma_{i=1}^{n-1}A(i) + O(n).$
解得$A(n) = \Theta(nlogn).$
优化:
如果我们在处理之前,先将indorder数组的值和其下表建立一个哈希映射,那么我们每次递归的时候平均只需要$O(1)$的时间就可以在inorder中找到树的根。
代码:
1 |
|
时间复杂度:
优化后的递推方程为$A(n) = \frac{2}{n} \Sigma_{i=1}^{n-1}A(i) + O(1).$
解得$A(n) = \Theta(n).$
[LC]105.从前序与中序遍历序列构造二叉树
https://erlsrnby04.github.io/2024/10/06/LC-105-从前序与中序遍历序列构造二叉树/