重建二叉树
2017-11-01 09:24
141 查看
题目描述:
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
答案:
答案思路:
前序遍历中第一个元素为二叉树的root,在中序遍历中找到root,左边是左子树,右边是右子树,例子中1左边2,4,7为左子树,1右边3,5,6,8为右子树。再回到前序遍历中,2作为左子树的第一个元素,以2为分界在中序遍历中找左右子树,可以看到只有左子树4,7。再回到前序遍历中,4作为左子树的第一个元素,在中序中找到4,可以看到只有右子树7,以此类推可以分析出以1为root的右子树的结构。
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
答案:
答案思路:
前序遍历中第一个元素为二叉树的root,在中序遍历中找到root,左边是左子树,右边是右子树,例子中1左边2,4,7为左子树,1右边3,5,6,8为右子树。再回到前序遍历中,2作为左子树的第一个元素,以2为分界在中序遍历中找左右子树,可以看到只有左子树4,7。再回到前序遍历中,4作为左子树的第一个元素,在中序中找到4,可以看到只有右子树7,以此类推可以分析出以1为root的右子树的结构。
class Solution: 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
相关文章推荐
- 重建二叉树
- 依据前序和中序列 重建二叉树
- 1935. 二叉树重建(根据先序遍历和中序遍历重建二叉树并进行广度优先遍历)
- 重建二叉树
- 二叉树(14)----由前序遍历和中序遍历重建二叉树,递归方式
- 面试题6:重建二叉树(根据前序遍历和中序遍历)
- 剑指Offer——重建二叉树
- 利用中根序列和后根序列重建二叉树
- 二叉树重建
- 前序和中序重建二叉树
- 由中序与前序、中序与后序重建二叉树
- 【追求进步】重建二叉树
- 剑指offer-面试题6 重建二叉树
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- 重建二叉树
- 重建二叉树
- 剑指offer系列之4:重建二叉树
- 重建二叉树
- 重建二叉树
- 面试题5:重建二叉树