[牛客网,剑指offer,python] 重建二叉树
2017-07-02 17:11
232 查看
重建二叉树
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路
前序遍历:根节点->左子树->右子树中序遍历:左子树->根节点->右子树
后序遍历:左子树->右子树->根节点
整体思路为使用递归的方法求解。
首先,寻找根节点,前序遍历的第一个元素即为根节点;
其次,从中序遍历找到根节点所在位置,根节点左边的元素为左子树中序遍历的结果,右边的元素的右子树中序遍历的结果;
最后,由于从中序遍历的结果中知道了左子树元素的个数 a 和右子树元素的个数 b,则根据先序遍历序列可以得出左子树和右子树先序遍历的结果。
代码
# -*- 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): # write code here if len(pre) == 0: return None if len(pre) == 1: return TreeNode(pre[0]) else: flag = TreeNode(pre[0]) flag.left = self.reConstructBinaryTree(pre[1:tin.index(pre[0])+1],tin[:tin.index(pre[0])]) flag.right = self.reConstructBinaryTree(pre[tin.index(pre[0])+1:],tin[tin.index(pre[0])+1:]) return flag
相关文章推荐
- [牛客网,剑指offer,python] 重建二叉树
- [牛客网,剑指offer,python] 重建二叉树
- [牛客网,剑指offer,python] 重建二叉树
- [牛客网,剑指offer,python] 重建二叉树
- [牛客网,剑指offer,python] 重建二叉树
- [牛客网,剑指offer,python] 重建二叉树
- [牛客网,剑指offer,python] 重建二叉树
- [牛客网,剑指offer,python] 重建二叉树
- [牛客网,剑指offer,python] 重建二叉树
- [牛客网,剑指offer,python] 重建二叉树
- [牛客网,剑指offer,python] 重建二叉树
- 《苦练算法》-剑指Offer- 四、 重建二叉树 -python编写
- 剑指offer之重建二叉树(Python)
- 【剑指Offer】重建二叉树 解题报告(Java & Python)
- 剑指offer 重建二叉树 @python
- 牛客_剑指offer_重建二叉树,再后续遍历_递归思想_分两端
- 剑指offer面试题6--重建二叉树
- 九度OJ-剑指offer-题目1385:重建二叉树