Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Деструктор
- template<typename T>
- Node<T>::~Node()
- {
- del(CHILD_NODE::ANY);
- }
- //Рекурсивный поиск ноды, если находит вызываю деструктор, освобождаю память, указатель ставлю на 0.
- template<typename T>
- bool Node<T>::del(const T &value)
- {
- Node<T> *temp = find(value);
- if (temp)
- {
- delete temp;
- temp = nullptr;
- return true;
- }
- return false;
- }
- //Удаление по типу ноды, левая, правая или любая.
- template<typename T>
- bool Node<T>::del(CHILD_NODE type)
- {
- bool any_deleted = false;
- if (m_Left && (type == CHILD_NODE::ANY || type == CHILD_NODE::LEFT))
- {
- m_Left->del();
- delete m_Left;
- m_Left = nullptr;
- any_deleted = true;
- }
- if (m_Right && (type == CHILD_NODE::ANY || type == CHILD_NODE::RIGHT))
- {
- m_Right->del();
- delete m_Right;
- m_Right = nullptr;
- any_deleted = true;
- }
- return any_deleted;
- }
- //Рекурсивный метод поиска, отдает указатель, работает по логике бинарного дерева.
- template<typename T>
- inline Node<T> * Node<T>::find(const T & value) const
- {
- if (value == m_Value)
- {
- return this;
- }
- else if (value >= m_Value && m_Right)
- {
- return m_Right->find(value);
- }
- else if (m_Left)
- {
- return m_Left->find(value);
- }
- else
- {
- return nullptr;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement