打卡群刷题总结0811——从中序与后序遍历序列构造二叉树

时间:2022-07-23
本文章向大家介绍打卡群刷题总结0811——从中序与后序遍历序列构造二叉树,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题目:106. 从中序与后序遍历序列构造二叉树

链接:https://leetcode-cn.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal

根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3] 返回如下的二叉树: 3 / 9 20 / 15 7

解题:

1、跟昨天的题非常类似。打卡群刷题总结0810——从前序与中序遍历序列构造二叉树

后续遍历:左右根;中序遍历:左根右。所以,后续遍历能够确定根节点元素,中序遍历能够确定左子树、右子树的元素。

扩展:二叉树的构造方法,除了由层次遍历,还可以有前序+中序,或者中序+后序。注意:前序+后序,不能构造唯一的二叉树。

代码:

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def buildTree(self, inorder, postorder):
        """
        :type inorder: List[int]
        :type postorder: List[int]
        :rtype: TreeNode
        """
        if len(inorder) == 0:
            return None
        index = inorder.index(postorder[-1])
        root = TreeNode(postorder[-1])
        root.left = self.buildTree(inorder[:index], postorder[:index])
        root.right = self.buildTree(inorder[index + 1:], postorder[index: -1])
        return root