📜  门| GATE-CS-2016(套装1)|第 42 题(1)

📅  最后修改于: 2023-12-03 14:58:31.219000             🧑  作者: Mango

GATE-CS-2016(套装1)|第 42 题

这道题目考察的是树的遍历,具体来说是后序遍历。

题目描述

给定一棵二叉树的前序遍历和中序遍历,你需要输出它的后序遍历。

示例

例如,给定前序遍历 ABDCEGF 和中序遍历 DBAEGCF,则后序遍历为 DBGEFCA

解题思路

对于树的遍历,一般有三种方式:前序遍历、中序遍历和后序遍历。

在这道题目中,我们已经给出了二叉树的前序遍历和中序遍历,因此我们可以通过它们来重建整棵二叉树。重建二叉树的具体方法可以参考LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal

如果我们已经重建了整棵二叉树,那么我们只需要对其进行后序遍历即可得到答案。

后序遍历的定义是:先遍历左子树,再遍历右子树,最后遍历根节点。

因此对于一棵二叉树来说,它的后序遍历可以通过分别后序遍历它的左子树和右子树,并先输出左右子树的后序遍历结果,最后输出根节点的值来得到。

代码实现

我们可以通过递归实现二叉树的重建和后序遍历,具体代码实现如下:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def buildTree(preorder: List[int], inorder: List[int]) -> TreeNode:
    if not preorder or not inorder:
        return None
    root = TreeNode(preorder[0])
    mid = inorder.index(preorder[0])
    root.left = buildTree(preorder[1:mid+1], inorder[:mid])
    root.right = buildTree(preorder[mid+1:], inorder[mid+1:])
    return root

def postorderTraversal(root: TreeNode) -> List[int]:
    if not root:
        return []
    res = []
    res += postorderTraversal(root.left)
    res += postorderTraversal(root.right)
    res.append(root.val)
    return res
总结

本题考查了树的遍历和重建二叉树的基础知识。对于二叉树的遍历,一般有三种方式,前序遍历、中序遍历和后序遍历,掌握它们的定义和实现方法对于程序员来说是非常重要的。同时,能够熟练地重建二叉树也是程序员的必备技能之一。