首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

TTreeNode递归不解

2013-07-04 
TTreeNode递归疑惑看别人SourceCode,在别处调用下面这个函数,函数代码如下:TTreeNode* TTPRForm::delete_t

TTreeNode递归疑惑
看别人SourceCode,在别处调用下面这个函数,函数代码如下:

TTreeNode* TTPRForm::delete_tree_node(TTreeNode * aNode)
{
        TTreeNode* tmpNode;
        TTreeNode* ChildNode = aNode->GetLastChild();
        while (ChildNode) {
           ChildNode = delete_tree_node(ChildNode);
        }
        tmpNode = aNode->Parent->GetPrevChild(aNode);
        aNode->Delete();
        return tmpNode;
}

以上不大明白,希望帮忙注释讲解。谢谢... 递归
[解决办法]


//删除给定节点以下所有子节点包括给定节点
TTreeNode* TTPRForm::delete_tree_node(TTreeNode * aNode)
 {
         TTreeNode* tmpNode;
         TTreeNode* ChildNode = aNode->GetLastChild(); //找到aNode最后一个子节点
         while (ChildNode) {  //判断最后一个子节点是否为空
            ChildNode = delete_tree_node(ChildNode);  //如果不为NULL,在递归查找子节点
         }
         tmpNode = aNode->Parent->GetPrevChild(aNode);
         aNode->Delete();
         return tmpNode;
 }

[解决办法]
TTreeNode* TTPRForm::delete_tree_node(TTreeNode * aNode)
{
    aNode->DeleteChildren();
    aNode->Delete();
    return NULL;
}

没 Node->Data 指针的说, 这样就可以了!

也可以在外部调用时, 直接使用, 而不再需要函数:

tv1->Selected->DeleteChildren();
tv1->Selected->Delete();



 

热点排行