我有一个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);
}