【递归】前序遍历和中序遍历树构造二叉树

思路:

从前序遍历序列中可得到根节点,然后从中序遍历中找出左子树和右子树,再对左子树和右子树进行同样的递归操作。

要注意的点:

root的类型为TreeNode类型,而不是整型

Python实现:

"""
Definition of TreeNode:
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None
"""

class Solution:
    """
    @param preorder : A list of integers that preorder traversal of a tree
    @param inorder : A list of integers that inorder traversal of a tree
    @return : Root of a tree
    """
    def buildTree(self, preorder, inorder):
        # write your code here
        if preorder == [] or inorder == []:
            return None
        root = preorder[0]
        root_pos = inorder.index(root)
        root = TreeNode(root)
        left_len = len(inorder[:root_pos])
        right_len = len(inorder[root_pos+1:])
        root.left = self.buildTree(preorder[1:left_len+1], inorder[:root_pos])
        root.right = self.buildTree(preorder[left_len+1:], inorder[root_pos+1:])
        return root
        

 

posted @ 2020-04-13 17:13  アカツキ  阅读(118)  评论(0编辑  收藏  举报