根据序遍历的特点,我们可以知道,对任意一棵二叉树tree,其后序遍历(ch)的最后一个字符就是这课二叉树的根节点x,然后我们可以在其中序遍历(sh)中把x找出来(假设为第i个字符),显然中序遍历中x前面的字符串(copy(sh,1,i-1))是tree的左子树的中序遍历,x后面的字符串是tree的右子树的中序遍历,后序遍历中copy(ch,1,i-1)是tree的左子树的后序遍历,copy(ch,i,length(ch)-i)是tree的右子树的后序遍历,所以,我们就可以递归地构造出tree了。而题目只说求其前序遍历,所以我们只要按前序遍历的方式输出即可。还要注意范围!
var s,c:string; procedure pre(s,c:string); var i:longint; x:char; begin x:=c[length(c)]; write(x); i:=pos(x,s); if i>1 then pre(copy(s,1,i-1),copy(c,1,i-1)); if i<length(c) then pre(copy(s,i+1,length(c)),copy(c,i,length(c)-i)); end; begin readln(s); readln(c); pre(s,c); end.
时间: 2024-09-29 10:04:30