剑指Offer(Python)重建二叉树
推荐在线编程平台
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
相关知识
题目要求根据前序遍历序列和中序遍历序列还原二叉树,我们先对二叉树进行简单的介绍,在简单介绍前序遍历、中序遍历、后序遍历的原理。
基本概念
二叉树是树的特殊一种:每个结点最多有两颗子树,结点的度最大为2;左子树和右子树是有顺序的,次序不能颠倒。
遍历
- 前序遍历 访问顺序:根节点
->
左子树->
右子树。 - 中序遍历 访问顺序:左子树
->
根节点->
右子树。 - 后序遍历 访问顺序:左子树
->
右子树->
根节点。
代码
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def reConstructBinaryTree(self, pre, tin):
if (len(pre) == 0):
return None
elif(len(pre) == 1):
return TreeNode(pre[0])
else:
rootNode = TreeNode(pre[0])
#遍历获得左节点
rootNode.left = self.reConstructBinaryTree(
pre[1: tin.index(pre[0]) + 1], tin[:tin.index(pre[0])])
#遍历获得右节点
rootNode.right = self.reConstructBinaryTree(
pre[tin.index(pre[0]) + 1:], tin[tin.index(pre[0]) + 1:])
return rootNode