![](https://csdnimg.cn/release/download_crawler_static/86368248/bg9.jpg)
46.
(1) (2)
47.
48. (1)
(2)设二叉树的前序遍历序列为 P1,P2,…,Pm,中序遍历序列为 S1,S2,…,Sm。因为前
序遍历是“根左右”,中序遍历是“左根右”,则前序遍历序列中第一个结点是根结点(P1)。
到中序序列中查询到 Si=P1,根据中序遍历时根结点将中序序列分成两部分的原则,有:
若 i=1,即 S1=P1,则这时的二叉树没有左子树; 否则,S1,S2,…,Si-1 是左子树的中
序遍历序列,用该序列和前序序列 P2,P3,…,Pi 去构造该二叉树的左子树。
若 i=m,即 Sm=P1,则这时的二叉树没有右子树; 否则,Si+1,Si+2,…,Sm 是右子树的中
序遍历序列,用该序列和前序序列中 Pi+1,Pi+2,…,Pm,去构造该二叉树的右子树。算法描
述请参见下面算法设计第 56 题。
(3)若前序序列是 abcd,并非由这四个字母的任意组合(4!=24)都能构造出二叉树。因
为以 abcd 为输入序列,通过栈只能得到 1/(n+1)*2n!/(n!*n!)=14 种,即以 abcd 为前序序
列的二叉树的数目是 14。任取以 abcd 作为中序遍历序列,并不全能与前序的 abcd 序列构
成二叉树。例如:若取中序列 dcab 就不能。
该 14 棵二叉树的形态及中序序列略。
49.不能。因 DABC 并不是 ABCD 的合法出栈序列,参照第 37、48(3)的解释。