我想写一个操作TreeView的函数,当删除任何一个TreeNode的时候,当其有子结点
的话,把所有其字结点、子结点下的子结点.... 删除。我想用递归算法实现,
有那位知道呢?
函数体如下:
procedure DeleteTreeNode(DelNode:TTreeNode)
begin
end;
的话,把所有其字结点、子结点下的子结点.... 删除。我想用递归算法实现,
有那位知道呢?
函数体如下:
procedure DeleteTreeNode(DelNode:TTreeNode)
begin
end;
var i,j:integer;
begin
if delnode.HasChildren then
begin
for i:=0 to delnode.Count-1 do begin
DeleteTreeNode(delnode.Item[i]);
form1.Memo1.Lines.Add(delnode.Text); //------------------记录删除顺序
delnode.Delete; end;
end
else
begin
form1.Memo1.Lines.Add(delnode.Text); //------------------记录删除顺序
delnode.Delete;
end;
end;
这里有你想要的
using namespace std;typedef struct MyDoubleList
{
MyDoubleList* pPreLst;
int nValue;
MyDoubleList* pNextLst;
}SomeList;
void MyPrint(MyDoubleList* pList)
{
int i;
if (pList->pNextLst != NULL)
{
i = pList->nValue;
pList = pList->pNextLst;
MyPrint(pList);
}
else
{
i = pList->nValue;
cout<< "Last OutPut " << pList->nValue << endl;
pList = pList->pPreLst;
if (pList != NULL)
{
pList->pNextLst = NULL;
MyPrint(pList);
}
}
}
void TestDoubleList(void)
{
MyDoubleList lst[10];
lst[0].nValue = 9;
lst[0].pPreLst = NULL;
lst[0].pNextLst = &lst[1];
for (int i=1; i<9; i++)
{
lst[i].nValue = 9 - i;
lst[i].pPreLst = &lst[i-1];
lst[i].pNextLst = &lst[i+1];
}
lst[9].nValue = 0;
lst[9].pPreLst = &lst[8];
lst[9].pNextLst = NULL;
MyPrint(lst);
}
// 刚写的代码 数的节点都类似上面的 双向链表 PreList就相当于 父节点,NextList就相当于子节点 TreeNode不是很熟悉所以。。
var i,j:integer;
begin
if delnode.HasChildren then
begin
j:=delnode.Count-1
for i:=j downto 0 do begin
DeleteTreeNode(delnode.Item[i]);
form1.Memo1.Lines.Add(delnode.Text); //------------------记录删除顺序
delnode.Delete; end;
end
else
begin
form1.Memo1.Lines.Add(delnode.Text); //------------------记录删除顺序
delnode.Delete;
end;
end;这个,倒着来应该可以了
Var
Node : TTreeNode;
I : Integer;
begin
If DelNode = nil then
Exit;
If DelNode.HasChildren then
begin
Node := DelNode.getFirstChild;
For I := 1 to DelNode.Count do
begin
DeleteTreeNode(DelNode);
Node := Node.getNextSibling
end;
DelNode.Delete;
end
else
DelNode.Delete; Result := True;
end;
我用TVirtualStringTree 这个树的时候这样是没问题的
{
while (pList->pNextLst != NULL)
{
pList = pList->pNextLst;
} cout<< "Last OutPut " << pList->nValue << endl;
pList = pList->pPreLst;
if (pList != NULL)
{
pList->pNextLst = NULL; // 相当于DELETE
MyPrint(pList);
}}
// 这段代码 相当于从最底层一个Node开始delete 然后倒数进行