📅  最后修改于: 2023-12-03 15:37:14.438000             🧑  作者: Mango
这道问题是关于数据结构中二叉树的遍历问题。具体问题如下:
给定一棵二叉树,其前序遍历为ABCDEFGH,中序遍历为CBEDFAHG。求后序遍历序列。
二叉树的遍历方法有三种,分别是前序遍历、中序遍历和后序遍历。对于给定前序遍历序列和中序遍历序列,我们可以通过已知的前序遍历规则,以及递归的思想,来构建二叉树。前序遍历的第一个元素为根节点,在中序遍历中找到根节点后,其左侧元素为根节点的左子树,右侧元素为根节点的右子树。递归分别构建左右子树即可。
在本题中,给定前序遍历为ABCDEFGH,中序遍历为CBEDFAHG,可以将其构建成以下的二叉树:
A
/ \
B C
/ / \
D E F
\ \
G H
观察上述的二叉树,可以得出其后序遍历为DEBGHFCA。
def BuildTree(preorder, inorder):
if not preorder or not inorder:
return None
root = TreeNode(preorder[0])
idx = inorder.index(preorder[0])
root.left = BuildTree(preorder[1:idx+1], inorder[:idx])
root.right = BuildTree(preorder[idx+1:], inorder[idx+1:])
return root
def PostorderTraversal(root):
res = []
if not root:
return res
res += PostorderTraversal(root.left)
res += PostorderTraversal(root.right)
res.append(root.val)
return res
preorder = ['A', 'B', 'D', 'E', 'G', 'C', 'F', 'H']
inorder = ['C', 'B', 'E', 'D', 'F', 'A', 'G', 'H']
root = BuildTree(preorder, inorder)
postorder = PostorderTraversal(root)
print(postorder) # 输出为 ['D', 'E', 'G', 'H', 'F', 'C', 'B', 'A']
二叉树的遍历问题在数据结构中是非常基础且重要的部分。熟悉了其中的遍历规则,对于二叉树的插入、删除等操作也会得心应手。