重建二叉树

2. 描述

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

示例1

输入:

复制返回值:

3. 思路

  1. 确认 input: pre-order traversal, in-order traversal

  2. idea: recursion tree method

    1. input to recursion: pre, in-order, start and end of searching range in in-order

    2. pop the top of pre-order in current level

    3. search the node val in in-order sequence to find the corresponding position

    4. create tree node for this node val and partition the searching range to left and right ranges based on this position

    5. Go to the left and right searching range respectively to find the root of left subtree and root of right subtree

    6. Connect the subtrees to current node and return current node

    7. Time: O(n) for searching node in in-order, O(n) for iterating every node in pre-order. So O(n^2) in total

    8. Space: O(height of tree)

4. Coding

Last updated

Was this helpful?