输入某二叉树的前序遍历和中序遍历的结果,重建此二叉树。
2017-09-06 20:54
393 查看
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
![](http://img.blog.csdn.net/20170906164151703?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWWVvbWFuOTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
比如我们知道一二叉树的前序遍历和中序遍历,要求画出这棵树。
前序遍历为1,2,4,7,3,5,6,8
中序遍历为4,7,2,1,5,3,8,6
![](http://img.blog.csdn.net/20170906164305806?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWWVvbWFuOTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
可以初步确定树的结构如下:
![](http://img.blog.csdn.net/20170906165204814?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWWVvbWFuOTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
生成树的具体过程如下:
![](http://img.blog.csdn.net/20170906175122637?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWWVvbWFuOTI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
如果理解了递归的访问,那么建树的过程就容易多了,前序遍历序列的第一个数(后序遍历的最后一个数)一定是根结点,所以可以根据此结点在中序序列中的位置把中序序列分为左子树和右子数两个部分,同样的道理,在左子树和右子数中同样可以用到这样的规律来确定每个中间结点。
比如我们知道一二叉树的前序遍历和中序遍历,要求画出这棵树。
前序遍历为1,2,4,7,3,5,6,8
中序遍历为4,7,2,1,5,3,8,6
可以初步确定树的结构如下:
生成树的具体过程如下:
如果理解了递归的访问,那么建树的过程就容易多了,前序遍历序列的第一个数(后序遍历的最后一个数)一定是根结点,所以可以根据此结点在中序序列中的位置把中序序列分为左子树和右子数两个部分,同样的道理,在左子树和右子数中同样可以用到这样的规律来确定每个中间结点。
# -*- 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
相关文章推荐
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
- 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。
- 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- java 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,
- 重建二叉树,输入某二叉树的前序遍历和中序遍历的结果,重建出二叉树,假设输入的前序和中序遍历结果中不含重复的数字
- 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,重建该二叉树
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- 《剑指Offer》 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 面试题6:重建二叉树,输入某二叉树的前序遍历和中序遍历的结果,重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5
- 输入某二叉树的前序遍历和中序遍历的结果请重建出该二叉树。
- 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5