美文网首页
剑指Offer - 4 - 重建二叉树

剑指Offer - 4 - 重建二叉树

作者: vouv | 来源:发表于2019-05-02 17:01 被阅读0次

题目描述

重建二叉树

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

思路

  1. 前序遍历第一个节点必是根节点
  2. 中序遍历根节点左边的节点必在左子树上,右边的节点必在右子树上
  3. 利用递归构建树

Code

  • Python
# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    # 返回构造的TreeNode根节点
    def reConstructBinaryTree(self, pre, tin):
      if len(pre) == 0:
        return None
      root = pre[0]
      node = TreeNode(root)
      l = len(pre)
      idx = tin.index(root)
      
      vleft = tin[0:idx]
      vright = tin[idx+1:l]

      pleft = pre[1:idx+1]
      pright = pre[idx+1:l]
      
      node.left = self.reConstructBinaryTree(pleft, vleft)
      node.right = self.reConstructBinaryTree(pright, vright)
      
      return node
  • JavaScript
/* function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} */
function reConstructBinaryTree(pre, vin)
{
  if (pre.length === 0) return undefined
  const len = pre.length
  const root = pre[0]
  const node = new TreeNode(root)
  const idx = vin.indexOf(root)
  
  const vleft = vin.slice(0, idx)
  const vright = vin.slice(idx + 1, len)
  
  const pleft = pre.slice(1, idx + 1)
  const pright = pre.slice(idx + 1, len)
  
  node.left = reConstructBinaryTree(pleft, vleft)
  node.right = reConstructBinaryTree(pright, vright)
  return node
}

相关文章

  • LeetCode | 面试题07. 重建二叉树【剑指Offer】

    LeetCode 面试题07. 重建二叉树【剑指Offer】【Medium】【Python】【二叉树】【递归】 问...

  • 71.重建二叉树

    day18: 剑指 Offer 07. 重建二叉树[https://leetcode-cn.com/prob...

  • 剑指Offer 07. 重建二叉树

    剑指 Offer 07. 重建二叉树 题目传送门[https://leetcode-cn.com/problems...

  • 剑指Offer--(5)重建二叉树

    title: 剑指Offer--(5)重建二叉树 categories: 算法与数据结构 tags: 数据结构 题...

  • 剑指Offer(四)

    剑指Offer(四) 重建二叉树 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的...

  • 重建二叉树

    《剑指offer》面试题7:重建二叉树 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前...

  • 重建二叉树

    上牛客网做了一道剑指offer的算法题 重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设...

  • 剑指offer #4 重建二叉树

    剑指offer 题集 https://www.jianshu.com/nb/32116527 题目描述:输入某二叉...

  • 剑指Offer - 4 - 重建二叉树

    题目描述 重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果...

  • 剑指offer第二版-7.重建二叉树

    本系列导航:剑指offer(第二版)java实现导航帖 面试题7:重建二叉树 题目要求:根据二叉树的前序遍历和中序...

网友评论

      本文标题:剑指Offer - 4 - 重建二叉树

      本文链接:https://www.haomeiwen.com/subject/nvlgnqtx.html