首页 > 解决方案 > 如果我想使用该结构中的字段作为参数,如何使用该结构内部的递归函数

问题描述

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

所以,我的问题是:

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

标签: c++

解决方案


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


推荐阅读