有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分相送。

解决方案 »

  1.   

    因为你这个模拟删除,只是加的TEXT,并没有真正的删除
    所以你的这个if (CTN.Count=0) then 对非叶子节点没起作用注释掉再看看 :)
      

  2.   

    如果把memo1.Text := memo1.Text + CTN.Text + '->'换成
    CTN.delete;
    那么后面的循环语句就会出现数组越界错误的,我想不是这里的问题.
      

  3.   

    procedure DelTree(CTN: TTreeNode);
    var i:integer;
    begin
     for i:=CTN.Count-1 downto 0 do
        DelTree(CTN.Item[i]);
     CTN.Delete;
    end;
      

  4.   

    不好意思,你的方法是对的,是我看错了把ctn.delete放到FOR循环里面去了,非常感谢啊。结贴