2011-02-18 110 views
3
void DeleteChildren(BSTNode *node) 
{ 
    // Recurse left down the tree... 
    if(node->HasLeftChild()) DeleteChildren(node->GetLeftChild()); 
    // Recurse right down the tree... 
    if(node->HasRightChild()) DeleteChildren(node->GetRightChild()); 

    // Clean up the data at this node. 
    node->ClearData(); // assume deletes internal data 

    // Free memory used by the node itself. 
    delete node; 
} 

// Call this from external code. 
DeleteChildren(rootNode); 

该函数正在递归删除BST。函数参数 - 指针或指针的引用?

我有一个关于第一行的问题,BSTNode *node, 我应该修改它为BSTNode *& node

+0

你有问题的代码,让你觉得有什么问题吗?我看起来很好。 – Kai 2011-02-18 16:19:12

回答

2

不,指针是按值传递的,所以当你将它作为参数传递时,本质上是“复制”指针。当您希望被调用者修改调用者中的参数时,只能通过引用传递。

3

你想通过引用传递指针的唯一时间是如果你想改变指针指向的内容。例如,如果您想在删除节点后将其设置为NULL,那么您需要以BSTNode*&的身份通过。

0

你不需要。你给你的DeleteChildren函数的指针将被删除,所以rootNode也会被删除。

如果您需要修改存储的rootNode地址,您的参数可能是BSTNode * &类型。在这种情况下,你不会。

0

否。假设rootNode也是BSTNode*类型,rootNodenode都指向相同的内存位置。