有TTreeNode生成的树:假设结构如下
Z
/ \
/ \
/ \
X Y
/ | \ / \
1 2 3 A C我现在要倒序一个结点一个结点地删除这棵树,也就是倒序删除。我写了一个过程procedure DelTree(CTN: TTreeNode);
var i:integer;
begin
if (CTN.Count=0) then
memo1.Text := memo1.Text + CTN.Text + '->';此行调试用进查看遍历的路线,以模拟删除节点 for i:=0 to CTN.Count-1 do DelTree(CTN.Item[i]);
end;结果是只能将树最低层显示出来,也就是说,MEMO1的结果为:
1->2->3->a->c
父结点没有遍历后显示出来,
谁位老牛来帮我解决下啊。
100分相送。
Z
/ \
/ \
/ \
X Y
/ | \ / \
1 2 3 A C我现在要倒序一个结点一个结点地删除这棵树,也就是倒序删除。我写了一个过程procedure DelTree(CTN: TTreeNode);
var i:integer;
begin
if (CTN.Count=0) then
memo1.Text := memo1.Text + CTN.Text + '->';此行调试用进查看遍历的路线,以模拟删除节点 for i:=0 to CTN.Count-1 do DelTree(CTN.Item[i]);
end;结果是只能将树最低层显示出来,也就是说,MEMO1的结果为:
1->2->3->a->c
父结点没有遍历后显示出来,
谁位老牛来帮我解决下啊。
100分相送。
所以你的这个if (CTN.Count=0) then 对非叶子节点没起作用注释掉再看看 :)
CTN.delete;
那么后面的循环语句就会出现数组越界错误的,我想不是这里的问题.
var i:integer;
begin
for i:=CTN.Count-1 downto 0 do
DelTree(CTN.Item[i]);
CTN.Delete;
end;