求二叉树的先序序列

  根据序遍历的特点,我们可以知道,对任意一棵二叉树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.

 

posted @ 2015-02-15 13:29  no regrets  阅读(366)  评论(0编辑  收藏  举报