题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
例如,给出
1 | 前序遍历 preorder = [3,9,20,15,7] |
返回如下的二叉树:
1 | 3 |
限制:0 <= 节点个数 <= 5000
思路
在前序遍历中找到root,然后遍历中序遍历找到root的索引,根据这个索引得出左子树个数,从而能在前序遍历和中序遍历中分出左子树区间和右子树区间,通过Arrays.copyOfRange()方法复制出左子树的前序遍历、中序遍历和右子树的前序遍历、中序遍历,然后进行递归,返回值为root。
代码
1 | /** |
后来优化了下,一开始使用HashMap存放节点,每次在中序遍历中找root就不用遍历的,但不知道为什么更慢了。
代码
1 | class Solution { |
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。