美文网首页
剑指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