2014-11-18 3 views
-4

У меня возникли проблемы с доступом к элементам данных подкласса Node.Как получить доступ к элементам подкласса

template <class T> 
class BinarySearchTree { 
private: 
    class Node { 
    public: 
     T data; 
     Node * left; 
     Node * right; 
     Node * parent; 

     Node() :left(NULL), right(NULL), parent(NULL) {}; 
     Node(const T& item) { 
      data = item; 
      left = NULL; 
      right = NULL; 
      parent = NULL; 
     }; 
    }; 

Я пытаюсь написать две функции для этого двоичного дерева поиска GetHeight() и GETSIZE(), однако мне нужно получить доступ к правым и левым узлам (или детям) из двоичного дерева поиска для того, чтобы вычислить его. Вот код, который я прописан пытается попытаться это:

template <class T> 
int BinarySearchTree<T>::getHeight() const { 
    //TODO 
    int number = 0; 
    Node * heightNode = new Node(); 
    heightNode = _root; 
    if (left == NULL && right == NULL){ 
     return 0; 
    } 
    else 
    { 
     number = max(right->height(), left->height()) + 1; 
    } 
    return height; 
} 

Мой мыслительный процесс, чтобы спуститься вниз как поддеревья и вернуть максимум каждого поддерева рассчитывать высоту.

template <class T> 
int BinarySearchTree<T>::getSize() const { 
    // TODO 
    int size; 
    if(){ 
     return 0; 
    } 
    inorderHelper(cout, this->Node->left); //L 
    size++;        //V 
    inorderHelper(cout, this->Node->right);//R 
    return size; 
} 

Вот мой мыслительный процесс заключается в проведении в порядке обходе на бинарном дереве поиска, увеличивающегося размер для каждого узла.

+4

'Node * heightNode = новый узел(); heightNode = _root; '- утечка много? –

+0

Как так? Я должен сделать heightNode равным корню. –

+0

Вы планировали рассказать о своей проблеме? Здесь я не вижу никаких подклассов. –

ответ

0

Проблема заключается в том, что вы пытаетесь получить доступ к нестационарным элементам через тип класса Node вместо доступа к ним через экземпляр Node. Хотя вы не указали достаточно релевантных частей BinarySearchTree, у вас есть член с именем _root, который на основе другого кода кажется корневым узлом вашего дерева. Предполагая, что это правильно, следующие строки должны быть обновлены.

inorderHelper(cout, this->Node->left); //L 
size++;        //V 
inorderHelper(cout, this->Node->right);//R 

... что-то вроде этого

inorderHelper(cout, _root->left); //L 
size++;        //V 
inorderHelper(cout, _root->right);//R 

К сожалению, это не даст вам реальный размер дерева, так как ваш код является неполным.

У вас также есть утечка памяти в getHeight(). Следующий код создает экземпляр Node, но никогда не удаляет его перед назначением _root на heightNode.

Node * heightNode = new Node(); 
heightNode = _root; 

Это должно, вероятно, будет изменен на

Node * heightNode = _root; 
Смежные вопросы