Tree ReConstruction

2. 题目描述

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。示例1

输入

复制

返回值

复制

3.思路

  1. Recursion: pre-order 用于遍历每一个node,并得到当前的subtree的rootnode,(pre-order从左往右数起,第一个node是root node) in-order 用于搜索root node位置来重建树

  2. Recursion: 输入是 剩下没有重建的pre-order的node和in-order 的信息,以及搜索的左右边界缩小搜索范围

  3. 如果在left, right边界里面找到root后,以它为中心分开左右两个subarray查找左右subtree的rootnode,并接到当前的rootnode的left, right

  4. Time: O(n) for searching root in subarray, O(n) for iterating every node for reconstruction, so O(n^2)

  5. Space: O(logn) for recursion

4. Coding

Last updated

Was this helpful?