剑指Offer(Python多种思路实现):重建二叉树

剑指Offer(Python多种思路实现):重建二叉树

面试7题:

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

解题思路一:递归

# 7重建二叉树   【递归】
class TreeNode:     # 先定义树的基本结构
    def __init__(self, x):
        self.val=x
        self.left=None
        self.right=None
class Solution:
    def reConstructBinaryTree(self, pre, tin):
        if not pre or not tin:  # 检测有无中序和先序遍历
            return None
        root = TreeNode(pre[0])
        val = tin.index(pre[0]) # .index可以查找列表里面值的下表

        root.left = self.reConstructBinaryTree(pre[1:val+1], tin[:val]) # val+1:val为3,列表要求[1:4]
        root.right = self.reConstructBinaryTree(pre[val+1:], tin[val+1:])

解题思路二:空间复杂度更低的解法。

def buildTree(self, preorder: 'List[int]', inorder: 'List[int]') -> 'TreeNode':
    def build(stop):
        if inorder and inorder[-1] != stop:
            root = TreeNode(preorder.pop())
            root.left = build(root.val)
            inorder.pop()
            root.right = build(stop)
            return root
    preorder.reverse()
    inorder.reverse()
    return build(None)
 
发布了18 篇原创文章 · 获赞 1 · 访问量 4209

猜你喜欢

转载自blog.csdn.net/weixin_44151089/article/details/104387008