图
6.1.13
应输出的后序遍历序列为
ACBMXZPD
注意:你的程序应能鉴别任何的错误输入。
题解
1
鉴别错误输入
设
predstr
—前序串;
s
1
—前序串的字符集;
midstr
—中序串;
s
2
—中序串的字符集;
predstr
串与
midstr
串必须同时满足下述三个条件方可对应同一棵二叉树:
1.
predstr
串与
midstr
串的长度相等;
2.
两串的字符为
{
’
A
’
‥
’
Z
’
}
的子集且各不相同;
3.
在
predstr
串中的字符必须在
midstr
串出现;
判别输入合法性的过程由布尔函数
correct
完成。若输入合法
(
即
predstr
串与
midstr
串可对应同一
棵二叉树
)
,则返回
true
;否则返回
false
。
fuction correct
:
boolean
;
begin
correct
←
false
;
if length(predstr)=length(minstr) {
若两序列的长度相同
}
then begin
s
1
←
[]
;
{
前序串的字符集初始化
}
for i
←
1 to length(predstr) do {
分析前序串的每一个字符
}
if (predstr[i]
s
1
)or(predstr[i]
[
’
A
’
‥
’
Z
’
])
then exit {
若前序串中字符重复或出现非法字符,则返回
false}
else s
1
←
s
1
+[predstr[i]]
;
{
否则当前字符进入前序串的字符集
}
s
2
←
[]
;
{
中序串的字符集初始化
}
for i
←
1 to length(midstr) do
if (midstr[i]
s
1
)or(midstr[i]
s
2
)
then exit {
若中序串的当前字符非前序串字符或者为重复字符,则返回
false}
else s
2
←
s
2
+[midstr[i]]
;
{
否则当前字符进入中序串的字符集
}
correct
←
true
;
{
返回输入合法标志
}
end
;
{then}
end
;
{correct}