Implementación de BST -- ++ camp codereview Relacionados El problema

BST implementation


6
vote

problema

Español

Mi implementación de BST. ¡Crítica será apreciada!

  @distance_hash2  
Original en ingles

My implementation of BST. Critique will be appreciated!

#include <iostream> template <class T> class Node {      template <class X>     friend class BST;     template <class X>     friend void clear(Node<X> *root);     template <class X>     friend bool search(const Node<X> *root, const X x);     template <class X>     friend Node<X>* to_add(Node<X> *root, const X x);     template <class X>     friend std::ostream& preorder(std::ostream& ss, Node<X> *root);     template <class X>     friend std::ostream& postorder(std::ostream& ss, Node<X> *root);       T data;     Node<T> *left;     Node<T> *right;      Node(): data(), left(nullptr), right(nullptr) { }     Node(T dt): data(dt), left(nullptr), right(nullptr) { }      T get() const { return data; } };  template<class T> void clear(Node<T> *root);  template <class T> class BST {     template <class X>     friend void clear(Node<X>* root);     template <class X>     friend std::ostream& bst_preorder(std::ostream& ss, BST<X>& tree);     template <class X>     friend std::ostream& bst_postorder(std::ostream& ss, BST<X>& tree);      Node<T> *root;  public:     BST(): root(nullptr) { }     BST(Node<T> *n): root(n) { }     ~BST() {         clear(root);     }      bool in_tree(T x) const;     BST<T>& insert(T x); };  template<class T> void clear(Node<T>* root) {     if (root) {         if (root->left) {             clear(root->left);         }         if (root->right) {             clear(root->right);         }         delete root;     } }   template<class T> bool search(const Node<T>* root, const T x) {     if (root) {         if (x == root->data)              return true;         else if (x < root->data)              return search(root->left, x);         else              return search(root->right, x);     }      else         return false; }  template<class T> bool BST<T>::in_tree(const T x) const {     return search(root, x); }  template<class T> Node<T>* to_add(Node<T> *root, const T x) {     if (root->left == nullptr && root->data > x)         return root;     else if (root->right == nullptr && root->data < x)         return root;     else if (root->data > x)         return to_add(root->left, x);     else if (root->data < x)         return to_add(root->right, x);     else         return nullptr; }  template<class T> BST<T>& BST<T>::insert(const T x) {     Node<T>* temp = new Node<T>(x);      if (!root)         root = temp;     else {         Node<T>* correct = to_add(root, x);         if (correct) {             if (correct->data > x)                 correct->left = temp;             else                  correct->right = temp;         }     }      return *this; }  template <class T> std::ostream& preorder(std::ostream& ss, Node<T>* root) {     ss << root->data << " ";     if (root->left)          preorder(ss, root->left);     if (root->right)         preorder(ss, root->right);      return ss; }  template<class T> std::ostream& bst_preorder(std::ostream& ss, BST<T>& tree) {     if (tree.root) {         return preorder(ss, tree.root);     }      return ss; }  template<class T> std::ostream& postorder(std::ostream& ss, Node<T>* root) {     if (root->left)         postorder(ss, root->left);     if (root->right)         postorder(ss, root->right);      ss << root->data << " ";      return ss; }  template<class T> std::ostream& bst_postorder(std::ostream&& ss, BST<T>& tree) {     if (tree.root) {         return postorder(ss, tree.root);     }      return ss; } 
  

Lista de respuestas

6
 
vote

Lo principal que puedo pensar, es que cualquier persona que usa la clase BST, no debería tener que saber qué es un nodo. El usuario debe agregar un valor, buscando un valor, etc. en la clase BST. Teniendo esto en cuenta, sugeriría mantener a la clase de nodo un miembro privado de BST, y todas las funciones, agregar, buscar, etc. deben ser miembros de BST.

 

The main thing I can think of, is that anyone using the BST class, shouldn't have to know what a Node is. The user should just be adding a value, searching for a value, etc.in the BST class. With this in mind, I would suggest keeping the Node class a private member of BST, and all the functions, add,search, etc. should be members of BST.

 
 

Relacionados problema

1  Piedra Papel tijeras  ( Rock paper scissors ) 
Gracias por su tiempo, soy nuevo en la programación y pasé algunos días haciendo este rock, papel y amp; Juego de tijera. ¿Qué otras mejoras posibles podrían ...

9  Entrada de usuario y lectura de contenidos de archivo  ( User input and reading contents of file ) 
Para la divulgación completa: esta es una tarea para mi clase de programación y solo quiero consejos o consejos sobre algunos del código. Detalles de asigna...

21  Algoritmo de suma de comprobación personalizada  ( Custom checksum algorithm ) 
A MIENTROS RUENTANDO, INVERSO: diseñé un algoritmo de suma de comprobación de una MMO que se usa para comprobar el Validez de un artículo que está vinculado...

0  Sistema de gestión de la biblioteca en C ++  ( Library management system in c ) 
Estoy haciendo un proyecto de principiante C ++ y es simplemente un sistema de administración de la biblioteca donde contratará un estudiante, devolver un lib...

3  Implementación más portátil de Tolower ()  ( More portable tolower implementation ) 
Me estoy desafiando a intentar intentar escribir una función que sea tan eficiente, portátil y a prueba de fallas posible. La función es muy simple y solo con...

2  Simplifique el código de verificación de banderas de bits  ( Simplify bit flags checking code ) 
Por favor, ayuda a hacer que este código sea más limpio. Es parte del procedimiento de la ventana que notifica a mi renderizado antes de Área de cliente de ...

4  Simulación simple de red neural en C ++ (Ronda 2)  ( Simple neural network simulation in c round 2 ) 
Intro Ayer He publicado esta pregunta . Desde entonces, he actualizado mi código para incorporar estas sugerencias . También he eliminado la dependencia d...

1  Integración de oscilador de fase perturbada  ( Perturbed phase oscillator integration ) 
Estoy integrando un sistema de osciladores de fase perturbados. Defino el sistema de ecuación y también la matriz jacobiana. Tengo que remodelar el vector dim...

14  Implementando una lista relacionada adecuada para un entorno profesional  ( Implementing a proper linked list for a professional environment ) 
Tengo algunas preocupaciones: ¿Es normal que la clase tenga al menos un nodo? En otras palabras, esta implementación no puede tener una lista vinculada va...

10  Quicksort  ( Templated quicksort ) 
original quicksort.h #include <algorithm> namespace quicksort { template <typename iterator, typename value_type> struct traits { static iterato...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos