📌  相关文章
📜  国际空间研究组织 | ISRO CS 2009 |问题 50(1)

📅  最后修改于: 2023-12-03 15:37:14.438000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2009 |问题 50

这道问题是关于数据结构中二叉树的遍历问题。具体问题如下:

给定一棵二叉树,其前序遍历为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']
总结

二叉树的遍历问题在数据结构中是非常基础且重要的部分。熟悉了其中的遍历规则,对于二叉树的插入、删除等操作也会得心应手。