重建二叉树

题目描述

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

Python 最终提交

class Solution:
    # 返回构造的TreeNode根节点
    def reConstructBinaryTree(self, pre, tin):
        # write code here
        if pre and tin:
            # 找到根节点
            root = TreeNode(pre[0])

            # 计算根节点在中序中的索引
            root_position_in_order = tin.index(root.val)

            # 计算左子树长度
            left_length = root_position_in_order
            right_length = len(tin) - root_position_in_order - 1

            # 比该索引值小的为左子树
            if left_length > 0:
                root.left = Solution().reConstructBinaryTree(pre[1:root_position_in_order + 1],
                                                             tin[:root_position_in_order])

            # 计算右子树长度
            if right_length > 0:
                # 比该索引值大的为右子树
                root.right = Solution().reConstructBinaryTree(pre[root_position_in_order + 1:],
                                                              tin[root_position_in_order + 1:])

            return root

C/C++ 最终提交

思路差不多, 不过换了种实现法

Last updated

Was this helpful?