美文网首页
剑指offer面试题06----重建二叉树

剑指offer面试题06----重建二叉树

作者: minningl | 来源:发表于2017-07-25 23:05 被阅读26次

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

    思路:对于这个题,必须先知道二叉树的前序遍历和中序遍历的特性。前序遍历是“根左右”,中序遍历是“左根右”,因此可以通过根的位置来划分左右两边的结点。此外,在划分两边之后,对于每一边,采取的策略依然和之前一样,因此我们可以考虑采用递归来进行操作。对于边界值,当前序或者中序的长度为0时return None。

    Python代码如下:

    class TreeNode(object):
        def __init__(self,val):
            self.val = val
            self.left = None
            self.right = None
    
    
    class Solution(object):
        def reConstructBinaryTree(self, pre, tin):
            if not pre and not tin:
                return None
            root = TreeNode(pre[0])
            
            i = tin.index(pre[0])
            root.left = self.reConstructBinaryTree(pre[1:i+1],tin[:i])
            root.right = self.reConstructBinaryTree(pre[i+1:], tin[i+1:])
            return root
    
    
    s = Solution()
    pre = [1, 2, 3, 5, 6, 4]
    tin = [5, 3, 6, 2, 4, 1]
    res = s.reConstructBinaryTree(pre, tin)
    print res.val
    print res.left.val
    

    确定left,right 中pre,tin的方法如下图所示,可以根据图形实例来进行理解

    重建二叉树.jpg

    相关文章

      网友评论

          本文标题:剑指offer面试题06----重建二叉树

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