重建二叉树

last modify

问题简述

给出二叉树前序遍历和中序遍历的结果,重建该二叉树并返回其根节点。
详细描述
输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

示例 1:
    Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
    Output: [3,9,20,null,null,15,7]
示例 2:
    Input: preorder = [-1], inorder = [-1]
    Output: [-1]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

  • 前序遍历,节点按照 [ 根节点 | 左子树 | 右子树 ] 的顺序输出。

  • 中序遍历,节点按照 [ 左子树 | 根节点 | 右子树 ] 的顺序输出。

  • 可知:

    • 前序遍历的首元素为根节点 node 的值。

    • 在中序遍历的结果中搜索根节点的索引 ,可将中序遍历划分为 [ 左子树 | 根节点 | 右子树 ]

    • 根据中序遍历中的左(右)子树的节点数量,可将前序遍历划分为 [ 根节点 | 左子树 | 右子树 ]

Python
  • 更常见的写法会使用一个字典来保存每个节点在中序遍历中的位置,取代root_idx = inorder.index(root_val) 这一步,

  • 但是这样做就必须每次从最初的 preorder 和 inorder 中截取左右子树的片段,代码会变得比较复杂,传递的参数比较多,故没有采用这种写法;

Last updated