重建二叉树
1. Link
2. 描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
示例1
输入:
复制返回值:
3. 思路
确认 input: pre-order traversal, in-order traversal
idea: recursion tree method
input to recursion: pre, in-order, start and end of searching range in in-order
pop the top of pre-order in current level
search the node val in in-order sequence to find the corresponding position
create tree node for this node val and partition the searching range to left and right ranges based on this position
Go to the left and right searching range respectively to find the root of left subtree and root of right subtree
Connect the subtrees to current node and return current node
Time: O(n) for searching node in in-order, O(n) for iterating every node in pre-order. So O(n^2) in total
Space: O(height of tree)
4. Coding
Last updated
Was this helpful?