Advertisement
AI_UBI

С++ Implicit pointer

Feb 18th, 2017
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.42 KB | None | 0 0
  1. //Деструктор
  2. template<typename T>
  3. Node<T>::~Node()
  4. {
  5.     del(CHILD_NODE::ANY);
  6. }
  7.  
  8. //Рекурсивный поиск ноды, если находит вызываю деструктор, освобождаю память, указатель ставлю на 0.
  9. template<typename T>
  10. bool Node<T>::del(const T &value)
  11. {
  12.     Node<T> *temp = find(value);
  13.  
  14.     if (temp)
  15.     {
  16.         delete temp;
  17.         temp = nullptr;
  18.  
  19.         return true;
  20.     }
  21.  
  22.     return false;
  23. }
  24. //Удаление по типу ноды, левая, правая или любая.
  25. template<typename T>
  26. bool Node<T>::del(CHILD_NODE type)
  27. {
  28.     bool any_deleted = false;
  29.  
  30.     if (m_Left && (type == CHILD_NODE::ANY || type == CHILD_NODE::LEFT))
  31.     {
  32.         m_Left->del();
  33.         delete m_Left;
  34.         m_Left = nullptr;
  35.  
  36.         any_deleted = true;
  37.     }
  38.    
  39.     if (m_Right && (type == CHILD_NODE::ANY || type == CHILD_NODE::RIGHT))
  40.     {
  41.         m_Right->del();    
  42.         delete m_Right;
  43.         m_Right = nullptr;
  44.  
  45.         any_deleted = true;
  46.     }
  47.  
  48.     return any_deleted;
  49. }
  50. //Рекурсивный метод поиска, отдает указатель, работает по логике бинарного дерева.
  51. template<typename T>
  52. inline Node<T> * Node<T>::find(const T & value) const
  53. {
  54.     if (value == m_Value)
  55.     {
  56.         return this;
  57.     }
  58.     else if (value >= m_Value && m_Right)
  59.     {
  60.         return m_Right->find(value);
  61.     }
  62.     else if (m_Left)
  63.     {
  64.         return m_Left->find(value);
  65.     }
  66.     else
  67.     {
  68.         return nullptr;
  69.     }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement