如果我想使用结构中的字段作为参数,如何使用结构内部的递归函数



我有一个AVL树(我不会发布所有代码,因为这没有意义(,我想使用递归函数来删除它

template <typename T>
struct AVL
{
Nod<T>* root;
....
void clear();
....
};
template<typename T>
inline void AVL<T>::clear()
{
....

if (root == nullptr)
{
return;
}
clear(root->left); //I can't do this because clear doesn't take parameters
clear(root->right);
....
}

为了删除我的节点,我想递归地调用这个函数,而不需要参数,它每次都必须从结构内部的根开始。但是,如果我在没有参数的情况下定义函数,我将无法调用clear(root->left(。

所以,我的问题是:

如何从根字段开始递归调用这个函数?

您可以将其从clear(root->left)更改为root->left->clear(),与右侧节点相同,但在调用clear之前需要检查它们是否为nullptr

创建另一个接受参数的私有函数:

template<typename T>
void AVL<T>::clear_helper(Node<T>* node)
{
clear_helper(node->left); 
clear_helper(node->right);
....
}

template<typename T>
inline void AVL<T>::clear()
{
....

if (root == nullptr)
{
return;
}
clear_helper(root);

}

最新更新