📅  最后修改于: 2023-12-03 14:58:31.219000             🧑  作者: Mango
这道题目考察的是树的遍历,具体来说是后序遍历。
给定一棵二叉树的前序遍历和中序遍历,你需要输出它的后序遍历。
例如,给定前序遍历 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
本题考查了树的遍历和重建二叉树的基础知识。对于二叉树的遍历,一般有三种方式,前序遍历、中序遍历和后序遍历,掌握它们的定义和实现方法对于程序员来说是非常重要的。同时,能够熟练地重建二叉树也是程序员的必备技能之一。