procedure creattree(var p:biptr);
var ch:char;
q:biptr;
begin
read(ch);
if ch<>'*' then begin
new(q); q^.data:=CH;q.lc:=nil;q.rc:=nil;
p:=q;q:=nil;dispose(p);
creattree(p^.lc);
creattree(p^.rc);
end
else p:=nil;
end;
var ch:char;
q:biptr;
begin
read(ch);
if ch<>'*' then begin
new(q); q^.data:=CH;q.lc:=nil;q.rc:=nil;
p:=q;q:=nil;dispose(p);
creattree(p^.lc);
creattree(p^.rc);
end
else p:=nil;
end;
解决方案 »
- 如何发送同一个数据流到多个客户端?
- 请教一个stringGrid的问题!各位大哥来帮忙啊!
- 关于离散曲线积分程序
- 我是新手几个简单的问题[Error] Unit1.pas(24): Unsatisfied forward or external declaration: 'TForm1.Button2Click'
- 哈哈,需要短信网关IP地址及其源代码的快来顶一下。
- 怎样使用外部控件,你大侠具体讲解,谢谢!
- 求解最简化SQL语句的写法:
- 请问delphi6中的fastnet到delphi7里怎么不见了?
- 为什么我用DELPHI编的程序在连接PARADOX数据库的时候没有问题!但当把PARADOX数据库转成SQLSERVER数据库时,程序就不能运行?
- delphi7中TClientDataSet的Locate问题
- 怎样用delphi做一个时钟触发器(详细见内)
- 怎样定义运行时创建控件的procedure
var ch:char;
q:biptr;
begin
read(ch);
if ch<>'*' then begin
new(q); q^.data:=CH;q.lc:=nil;q.rc:=nil;
p:=q;q:=nil;dispose(q);
creattree(p^.lc);
creattree(p^.rc);
end
else p:=nil;
end;
你的creattree是通过先根遍历序列来生成树。你调试的时候总也是见不到输出结果吧?因为程序总是等待你的输入,这个原因很简单。你看看你的CreateTree,如果要中止递归,只有输入为*,但是每次递归的结果都产生两个相同的递归分支,也就是说必须要输入叶子的两倍的*,才能结束递归。
具体地说,对于树
a -- b
|
+--- c
如果你输入abc*,那么程序会认为是这样的树
a -- b -- c -- *
|
+--- ?
然后等待你输入?的内容
所以你必须输入
ab**c**
才能得到结果,程序识别过程如下:
a -- b -- *
| |
| +--- *
|
+--- c -- *
|
+ -- *
procedure output(p:biptr);
begin
if p<>nil then begin
writeln (p^.data);
output(p^.lc);
output(p^.rc);
end;
end; <---这里少了一个end;然后你输入ab**c**回车
得到输出:
a
b
c
a--c--e
| |
| d--f
b你应该先把缺少了左或者右的节点补上*,变成
a--c--e--*
| |
| d--f--*
| |
| *
|
f--*
|
*
执行程序的时候,输入上面加了*的树的先根遍历,也就是:
ab**cd*f**e**回车
就可以得到输出了,输出是先根遍历没有*号,也就是:
a
b
c
d
f
e明白了吧?
呵呵,我可够累的,你也应该多给我点分数啊 :)
http://www.csdn.net/expert/topic/509/509751.shtm