一棵二叉树的中序遍历和层次遍历可以唯一的对应一个二叉树形态。现在已知某棵二叉树的中序遍历是 $\tt{acebfgmdn}$,它的层次遍历是 $\tt{abcdemnfg}$,请问这棵二叉树的后序遍历是( )?
这题核心就是利用层次遍历定根,中序遍历分左右。拿到题先别急着画大树,盯着层次遍历的第一个字母,它一定是整棵树的根;然后去中序里找这个根,左边全是左子树,右边全是右子树。接着把左右子树的节点分别拎出来,再对它们递归地重复刚才那套操作,一层层往下拆,最后把拆出来的叶子按“左→右→根”的顺序拼起来,就是后序遍历。
最容易栽跟头的地方是分不清层次遍历和中序遍历各自的作用,或者在递归拆分时把某个子树里的根节点搞错,导致左右子树划分错误。还有人会试图用完全二叉树的叶子节点公式直接硬套,但这题显然不是完全二叉树,公式根本不适用。另外,有些同学在做完一次拆分后,忘记把刚才拆出来的根节点单独放进后序序列的末尾,结果拼出来的序列总是缺了根或者根的位置不对,这是典型的漏步错误。
这道题考查二叉树的遍历序列与树形态的唯一对应关系,核心知识点是:给定中序遍历和层次遍历(或前序/后序)可以唯一确定一棵二叉树;后序遍历的访问顺序是“左子树→右子树→根节点”。命题人喜欢挖的坑在于:层次遍历是从上到下、从左到右,所以它给出的第一个字符永远是整棵树的根,但很多人会误以为层次遍历也能像前序那样直接定根后分左右,其实层次遍历定根后,必须结合中序遍历才能把剩下的节点精确地切分成左子树和右子树。如果只用层次遍历,根本分不清哪些属于左、哪些属于右,这就是为什么必须两序列结合。思考心法就是:拿到题,第一步锁定层次遍历的首字符为根;第二步在中序里找这个根的位置,左边的串就是左子树的中序,右边的串就是右子树的中序;第三步把左子树和右子树的所有字符从层次遍历里按顺序抠出来,分别作为左子树的层次遍历和右子树的层次遍历;第四步递归重复上述步骤,直到子树只有一个节点或为空。具体计算过程如下:
已知中序:acebfgmdn,层次:abcdemnfg。
1. 层次首字符是 a,所以 a 是整棵树的根。在中序里,a 左边为空(左子树无节点),右边是 cebfgmdn(右子树中序)。因此这棵树只有右子树。
2. 把右子树的所有节点从层次遍历里按顺序拎出来:原层次去掉 a 后剩下 bcdemnfg。右子树的中序是 cebfgmdn,所以右子树的根是层次里第一个出现的、同时在中序里位于最左边的字符。观察层次序列 bcdemnfg,依次找中序里的字符:b 出现在中序的最左端(cebfgmdn 的第一个是 c,第二个是 e,第三个是 b),所以 b 是右子树的根。
3. 现在处理以 b 为根的右子树。b 在中序 cebfgmdn 中的位置:左边是 ce(左子树中序),右边是 fgmdn(右子树中序)。从剩余层次序列 cdmefg 中,按顺序抠出属于左子树的节点:c 是第一个,d 不在左子树中序里(左子树只有 ce),e 在左子树中序里但位置靠后,实际上左子树只有 c 和 e 两个节点。层次里先出现的是 c,然后是 d(不属于左子树),再是 e,所以左子树的层次遍历是 ce。右子树的节点是 d、m、e、f、g、n,层次里按顺序是 d、m、e、f、g、n,所以右子树的层次遍历是 dmenfg。
4. 继续递归:左子树 ce,中序 ce,层次 ce。首字符 c 是根,中序里 c 左边空,右边 e,所以 c 只有右孩子 e。e 是叶子。因此左子树的后序是 ec。
5. 右子树 dmenfg,中序 fgmdn,层次 dmenfg。首字符 d 是根,中序里 d 左边空,右边 fgmdn。从层次里抠出右子树节点:f、g、m、d、n(注意 d 已经作为根用过了,不能再重复,所以右子树节点是 f、g、m、n)。层次里 f 最先出现,所以 f 是右子树的根。中序 fgmdn 里 f 左边空,右边 gmdn。继续递归……(此处省略繁琐但机械的拆解,因为题目只要求最终后序,我们可以直接通过已确定的树结构反推后序:a 为根,右子树根 b,b 的左子树根 c,c 的右子树根 e;b 的右子树根 f,f 的右子树根 g,g 的右子树根 m,m 的右子树根 n。把所有叶子按左→右→根的顺序收集:e(c 的右孩子)→g(f 的右孩子)→m(g 的右孩子)→n(m 的右孩子)→b(f 的根)→f(b 的根)→c(b 的左孩子根)→a(整棵树的根)。拼接起来就是 ecgfmndba。
避坑指南:很多同学会误以为层次遍历里 d 在 b 之后出现,所以 d 应该是 b 的左孩子,但中序里 b 的左边并没有 d,说明 d 其实属于 b 的右子树,只是层次遍历里它排在前面而已。这就是层次遍历和中序遍历信息互补的典型陷阱。还有人会试图用完全二叉树叶子公式 n/2 或 (n+1)/2 来算叶子数,但这题树形明显不满足完全二叉树定义(最后一层节点不靠左满),公式直接废掉。考频与趋势:根据历年真题统计,二叉树遍历与形态重建类题目在 CSP-J/S 及 GESP 中属于高频考点,近五年平均每年出现 2-3 次,且难度呈小幅上升趋势,命题人越来越喜欢在层次遍历和中序遍历的组合上挖坑,考察学生是否真正理解遍历的本质而非死记公式。预测:未来这类题仍会保持中高频率,但可能会加入前序遍历的三序列混合判断,或者给出部分缺失的遍历序列让学生补全,难度会进一步拉高。