#include <Tree_L.h>
Constructores y destructor | |
Tree () | |
Constructor de vector. | |
Tree (Tree &o) | |
Constructor de copia desde otro árbol (copia superficial). | |
Tree (const value_type &d) | |
Constructor a partir de un valor. | |
~Tree () | |
Destructor. | |
typedef void | NOT_null_pointer |
Truco para evitar comparar con 0 ( nil ) al usar Tree::Node* para construir Tree() . | |
Tree (Node *p) | |
Constructor a partir de un nodo. | |
Tree (NOT_null_pointer *p) | |
Constructor a partir de un nodo [ requiere p != 0 ]. | |
Operaciones básicas | |
bool | Empty () const |
Retorna "true" si el sub-árbol está vacío. | |
unsigned | Count () const |
Retorna la cantidad de valores almacenados en el sub-árbol. | |
unsigned | Count_Children () const |
Retorna la cantidad de hijos del árbol. | |
unsigned | Size () const |
Usa Count() para retornar la cantidad de valores almacenados en el sub-árbol. | |
bool | Ok () |
Usa Check_Ok(Tree& T) para verificar la invariante de Tree . | |
bool | Check_Ok (Tree &T) |
Verifica que se cumpla la invariante de la clase, o sea, que el objeto esté bien construido. | |
Operaciones de borrado | |
void | Erase () |
Elimina el árbol y sus descendientes. | |
void | Erase_Son (unsigned n) |
Elimina el sub-árbol número "n" . | |
void | Erase_Son_Prev (unsigned n, Node *&) |
Elimina el sub-árbol número "n-1" y retorna un puntero al nodo anterior al borrado. | |
Operaciones de comparación | |
bool | Equals (const Tree &o) const |
¿¿¿ (*this==o) ??? | |
bool | Same (const Tree &o) const |
Retorna true si "o" comparte la raíz con "*this" . | |
bool | operator== (const Tree &p, const Tree &q) |
¿¿¿ (p == q) ??? | |
bool | operator!= (const Tree &p, const Tree &q) |
¿¿¿ (p != q) ??? | |
Tipos públicos | |
typedef Elem_Tree | value_type |
Nombre estándar del tipo de elemento contenido. | |
Métodos públicos | |
Operaciones de copiado | |
Tree & | operator= (Tree &o) |
Sinónimo de this->Copy(o) . | |
Tree & | Copy (Tree &o) |
Copia superficial desde "o" . | |
Tree & | Move (Tree &o) |
Traslada el valor de "o" a "*this" . | |
Tree & | Swap (Tree &o) |
Intercambia los valores de "*this" y "o" . | |
Tree & | Copy_Deep (const Tree &o) |
Copia profunda de "o" . | |
Tree & | operator= (const value_type &d) |
Usa Change_Root() para sustituir por "d" el valor almacenado en la raíz del árbol. | |
Métodos para cambiar los valores almacenados en el árbol | |
Tree | Change_Root (const value_type &d) |
Sustituye por "d" el valor almacenado en la raíz del árbol. | |
Tree | Change_Child (unsigned n, const value_type &d) |
Sustituye por "d" el valor almacenado en el hijo número "n" del árbol. | |
Tree | Change_Left_Sibling_Inmediate (const value_type &d) |
Sustituye por "d" el valor almacenado en el hermano inmediatamente anterior del sub-árbol. | |
Tree | Change_Right_Sibling_Inmediate (const value_type &d) |
Sustituye por "d" el valor almacenado en el hermano inmediatamente posterior del sub-árbol. | |
Tree | Graft (unsigned n, Tree &o) |
Injerta "o" para que sea el "n"-ésimo hijo de "*this" . | |
Operaciones para usar los valores almacenados | |
value_type & | Data () |
Valor almacenado en la raíz del sub-árbol. | |
value_type & | operator * () |
Valor almacenado en la raíz del sub-árbol. | |
value_type * | operator-> () |
Puntero al valor almacenado en la raíz del sub-árbol. | |
Métodos para recorrer el árbol | |
Tree | Root () |
Raíz del sub-árbol. | |
Tree | Father () |
Acceso al padre. | |
Tree | Child (unsigned n) |
Acceso al "n"-ésimo hijo. | |
Tree | Left () |
Sub-árbol izquierdo [en un árbol binario]. | |
Tree | Right () |
Sub-árbol derecho [en un árbol binario]. | |
Tree | Leftmost () |
Obtiene el hijo más izquierdo del árbol. | |
Tree | Rightmost () |
Obtiene el hijo más derecho del árbol. | |
Tree | Sibling (int n) |
"n"-ésimo hermano a partir de "*this" . | |
Tree | Left_Sibling () |
Obtiene el hermano no vacío anterior, que está hacia la izquierda. | |
Tree | Right_Sibling () |
Obtiene el hermano no vacío siguiente, que está hacia la derecha. | |
Tree | Previous_Sibling () |
Sinónimo de Left_Sibling() . | |
Tree | Prev_Sibling () |
Sinónimo de Left_Sibling() . | |
Tree | Next_Sibling () |
Sinónimo de Right_Sibling() . | |
Tree | Right_Sibling_Inmediate () |
Obtiene el hermano que está inmediatamente hacia la derecha. | |
Tree | Left_Sibling_Inmediate () |
Obtiene el hermano que está inmediatamente hacia la izquierda. | |
Propiedades del árbol | |
unsigned | Child_Number () |
Retorna "n" si "*this" es el n-ésimo hijo de su padre, si no retorna 0 (cero). | |
unsigned | Leftmost_N () |
Retorna "n" si el hijo más izquierdo de "*this" es el n-ésimo hijo, si no retorna 0 (cero). | |
unsigned | Rightmost_N () |
Retorna "n" si el hijo más derecho de "*this" es el n-ésimo hijo, si no retorna 0 (cero). | |
bool | Is_Leaf () |
Retorna "true" si el árbol es una hoja. | |
bool | Is_Root () |
Retorna "true" si el árbol no tiene padre. | |
unsigned | Nref () |
Cantidad de referencias de la raíz del árbol. | |
Métodos privados estáticos | |
Funciones para manipular valores a bajo nivel | |
Tree & | CastTo_Sub_Tree_Ref (Node *&p) |
Convierte el puntero al nodo en un referencia a Tree . | |
Funciones recursivas que realizan el trabajo sobre nodos | |
void | Erase0 (Node *p) |
Elimina recursivamente a "*p" y a todos sus descendientes. | |
bool | Comp0 (const Node *p, const Node *q) |
Compara recursivamente los árboles cuyos nodo raíz son "*p" y "*q" . | |
void | Count0 (const Node *p, unsigned &n) |
Implementación recursiva para Count() . | |
Node * | Copy_Deep0 (const Node *p) |
Hace una copia profunda nodo por nodo del árbol cuyo nodo raíz es "*p" . | |
Atributos privados | |
Tree::Node * | _root |
Un árbol "es" el puntero al nodo raíz. |
Tree::Copy_Deep()
.Father()
o Root()
sean métodos const
.Tree&
porque es más eficiente, pues cada vez que un Tree
es copiado hay que actualizar la "cuenta de referencia" de la raíz del sub-árbol.
Definición en la línea 44 del archivo Tree_L.h.
|
Nombre estándar del tipo de elemento contenido.
|
|
Truco para evitar comparar con
Al implementar cada uno de los métodos de
Esta clase se usa como una marca para que se ejecute el contructor
|
|
Constructor de vector.
|
|
Constructor de copia desde otro árbol (copia superficial).
|
|
Constructor a partir de un valor.
|
|
Destructor.
|
|
Constructor a partir de un nodo.
|
|
Constructor a partir de un nodo [ requiere
|
|
Retorna
|
|
Retorna la cantidad de valores almacenados en el sub-árbol.
|
|
Retorna la cantidad de hijos del árbol.
|
|
Usa
|
|
Usa
|
|
Elimina el árbol y sus descendientes.
|
|
Elimina el sub-árbol número
|
|
Elimina el sub-árbol número
|
|
Sinónimo de
|
|
Copia superficial desde
|
|
Traslada el valor de
|
|
Intercambia los valores de
|
|
Copia profunda de
|
|
Usa
|
|
Sustituye por
|
|
Sustituye por
|
|
Sustituye por
|
|
Sustituye por
|
|
Injerta
|
|
Valor almacenado en la raíz del sub-árbol.
|
|
Valor almacenado en la raíz del sub-árbol.
|
|
Puntero al valor almacenado en la raíz del sub-árbol.
|
|
¿¿¿ (*this==o) ???
|
|
Retorna
|
|
Raíz del sub-árbol.
|
|
Acceso al padre.
|
|
Acceso al
|
|
Sub-árbol izquierdo [en un árbol binario].
|
|
Sub-árbol derecho [en un árbol binario].
|
|
Obtiene el hijo más izquierdo del árbol.
|
|
Obtiene el hijo más derecho del árbol.
Tree Child = T.Rightmost(); while ( ! Child.Empty() ) { Process( Child ); Child = Child.Left_Sibling(); } |
|
|
|
Obtiene el hermano no vacío anterior, que está hacia la izquierda.
|
|
Obtiene el hermano no vacío siguiente, que está hacia la derecha.
|
|
Sinónimo de
|
|
Sinónimo de
|
|
Sinónimo de
|
|
Obtiene el hermano que está inmediatamente hacia la derecha.
|
|
Obtiene el hermano que está inmediatamente hacia la izquierda.
|
|
Retorna
|
|
Retorna
|
|
Retorna
|
|
Retorna
|
|
Retorna
|
|
Cantidad de referencias de la raíz del árbol.
|
|
Convierte el puntero al nodo en un referencia a
|
|
Elimina recursivamente a
// Forma usual de invocación if ( child->_refCount <= 1 ) { // Ya no hay más referencias a "child" Erase0( child ); // lo elimina } else { child->_refCount--; // uno menos le apunta child->_n_child = -1; child->_right_brother = 0; // ya no es hijo de nadie }
|
|
Compara recursivamente los árboles cuyos nodo raíz son
|
|
Implementación recursiva para
|
|
Hace una copia profunda nodo por nodo del árbol cuyo nodo raíz es
|
|
Verifica que se cumpla la invariante de la clase, o sea, que el objeto esté bien construido.
|
|
¿¿¿ (p == q) ???
|
|
¿¿¿ (p != q) ???
|
|
Un árbol "es" el puntero al nodo raíz.
|