如何解释给定的前序和中序节点以形成后序节点?

问题描述 投票:0回答:2

我不确定遍历是如何工作的以及它呈现的顺序

考虑遍历一棵树

预购 --> ABCEIFJDGHKL 顺序 --> EICFJBGDKHLA

以下哪项是正确的后序遍历?

A) EIFJCKGLHDBA

B) FCGKLHDBUAE

C) FCGKLHDBAEIJ

D) IEJFCGKLHDBA

我试着画出图表,但它与问题呈现的顺序不一样

tree binary binary-tree
2个回答
0
投票

前序序列总是先列出根,所以树的根是 A。由于后序必须列出根 last,我们已经可以删除潜在的答案 (B) 和 (C),因为那些最后一个位置没有A。

中序首先列出根的左子树的节点,然后是根,然后是右子树的节点。由于 A 在中序序列中最后出现,所有其他节点都在左子树中。

这意味着左子树的预序序列为 BCEIFJDGHKL(没有 A 的原始预序),因此 B 是它的根。所以我们有:

   A
  / \
 B   -
   

扩展B: 在中序序列中,我们在中途找到B,因此它的左子树由EICFJ组成,右子树由GDKHL组成。预序将左子树列为 CEIFJ,因此 C 是该子树的根。预序将右子树列为 DGHKL,因此 D 是该子树的根。这给了我们:

     A
    /
   B
  / \
 C   D
 

展开C: 在中序序列EICFJ中,C的位置表示它的左子树由EI组成,右子树由FJ组成。 EI 的预序也是 EI,所以 E 是 C 的左孩子。FJ 的预序也是 FJ,所以 F 是 C 的右孩子:

       A 
      /
     B
    / \
   C   D
  / \
 E   F

展开E和F: 在中序序列EI中,E的位置表明I是它的右孩子。在中序序列FJ中,F的位置表明J是它的右孩子:

       A 
      /
     B
    / \
   C   D
  / \
 E   F
  \   \
   I   J
   

展开D: 在中序序列GDKHL(见“展开B”)中,D的位置表示G是它的左孩子,KHL是它右子树中的节点。 KHL 的预序是 HKL,所以 H 是右子树的根:

        A 
       /
     _B_
    /   \
   C     D
  / \   / \
 E   F G   H
  \   \
   I   J

展开H: 中序序列中KHL中间有H,所以剩下的K和L放在哪里就很清楚了

        A 
       /
     _B_
    /   \
   C     D
  / \   / \
 E   F G   H
  \   \   / \
   I   J K   L
   

此时可以直观地确认这棵树具有给定的前序和中序遍历。我们也可以读到后序遍历,即IEJFCGKLHDBA,所以正确答案是选项(D)。


-1
投票

o 确定正确的后序遍历,我们需要先了解每次遍历时访问节点的顺序。在前序遍历中,首先访问根节点,然后是左子树,然后是右子树。在中序遍历中,首先访问左子树,然后是根节点,然后是右子树。

为了获得后序遍历,我们首先访问左子树,然后是右子树,最后是根节点。 从根节点 A 开始,我们可以通过访问左子树,然后是右子树,最后是根节点来按后序遍历树。得到的后序遍历是:

C I F J D G K L H B E A

在提供的选项中,只有选项 A) EIFJCKGLHDBA 匹配此后序遍历。因此,正确答案是 A)。 :

© www.soinside.com 2019 - 2024. All rights reserved.