#include <Tree_L.h>
Constructores y destructor | |
| Tree () | |
| Constructor de vector. | |
| Tree (const Tree &o) | |
| Constructor de copia desde otro árbol (copia superficial). | |
| Tree (const value_type &d) | |
| ~Tree () | |
| Destructor. | |
| typedef void | NOT_null_pointer |
Truco para evitar comparar con 0 ( nil ) al usar Tree::Tree_Node<E>* para construir Tree(). | |
| Tree (Tree_Node< E > *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 (const Tree< E > &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, Tree_Node< E > *&) |
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". | |
| template<class X> | |
| bool | operator== (const Tree< X > &p, const Tree< X > &q) |
| ¿¿¿ (p == q) ??? | |
| template<class X> | |
| bool | operator!= (const Tree< X > &p, const Tree< X > &q) |
| ¿¿¿ (p != q) ??? | |
Tipos públicos | |
| typedef E | value_type |
| Nombre estándar del tipo de elemento contenido. | |
Métodos públicos | |
Operaciones de copiado | |
| Tree & | operator= (const Tree &o) |
Sinónimo de this->Copy(o). | |
| Tree & | Copy (const 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) |
| 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. | |
| const value_type & | Data () const |
| Valor almacenado en la raíz del sub-árbol. | |
| const value_type & | operator * () const |
| Valor almacenado en la raíz del sub-árbol. | |
| const value_type * | operator-> () const |
| Puntero al valor almacenado en la raíz del sub-árbol. | |
Métodos para recorrer el árbol | |
| Tree | Root () const |
| Raíz del sub-árbol. | |
| Tree | Father () const |
| Acceso al padre. | |
| Tree | Child (unsigned n) const |
Acceso al "n"-ésimo hijo. | |
| Tree | Left () const |
| Sub-árbol izquierdo [en un árbol binario]. | |
| Tree | Right () const |
| Sub-árbol derecho [en un árbol binario]. | |
| Tree | Leftmost () const |
| Obtiene el hijo más izquierdo del árbol. | |
| Tree | Rightmost () const |
| Obtiene el hijo más derecho del árbol. | |
| Tree | Sibling (int n) const |
"n"-ésimo hermano a partir de "*this". | |
| Tree | Left_Sibling () const |
| Obtiene el hermano no vacío anterior, que está hacia la izquierda. | |
| Tree | Right_Sibling () const |
| Obtiene el hermano no vacío siguiente, que está hacia la derecha. | |
| Tree | Previous_Sibling () const |
Sinónimo de Left_Sibling(). | |
| Tree | Prev_Sibling () const |
Sinónimo de Left_Sibling(). | |
| Tree | Next_Sibling () const |
Sinónimo de Right_Sibling(). | |
| Tree | Right_Sibling_Inmediate () const |
| Obtiene el hermano que está inmediatamente hacia la derecha. | |
| Tree | Left_Sibling_Inmediate () const |
| Obtiene el hermano que está inmediatamente hacia la izquierda. | |
Propiedades del árbol | |
| unsigned | Child_Number () const |
Retorna "n" si "*this" es el n-ésimo hijo de su padre, si no retorna 0 (cero). | |
| unsigned | Leftmost_N () const |
Retorna "n" si el hijo más izquierdo de "*this" es el n-ésimo hijo, si no retorna 0 (cero). | |
| unsigned | Rightmost_N () const |
Retorna "n" si el hijo más derecho de "*this" es el n-ésimo hijo, si no retorna 0 (cero). | |
| bool | Is_Leaf () const |
Retorna "true" si el árbol es una hoja. | |
| bool | Is_Root () const |
Retorna "true" si el árbol no tiene padre. | |
| unsigned | use_count () const |
| 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 (Tree_Node< E > *&p) |
Convierte el puntero al nodo en un referencia a Tree. | |
Funciones recursivas que realizan el trabajo sobre nodos | |
| void | Erase0 (Tree_Node< E > *p) |
Elimina recursivamente a "*p" y a todos sus descendientes. | |
| bool | Comp0 (const Tree_Node< E > *p, const Tree_Node< E > *q) |
Compara recursivamente los árboles cuyos nodo raíz son "*p" y "*q". | |
| void | Count0 (const Tree_Node< E > *p, unsigned &n) |
Implementación recursiva para Count(). | |
| Tree_Node< E > * | Copy_Deep0 (const Tree_Node< E > *p) |
Hace una copia profunda nodo por nodo del árbol cuyo nodo raíz es "*p". | |
Atributos privados | |
| Tree_Node< E > * | m_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 68 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).
|
|
||||||||||
|
|
|
|||||||||
|
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
|
|
||||||||||||||||
|
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.
|
|
|||||||||
|
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.
Tree<E> Child = T.Leftmost(); while ( ! Child.Empty() ) { Process( Child ); Child = Child.Right_Sibling(); } |
|
|||||||||
|
Obtiene el hijo más derecho del árbol.
Tree<E> 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->m_refCount <= 1 ) { // Ya no hay más referencias a "child" Erase0( child ); // lo elimina } else { child->m_refCount--; // uno menos le apunta child->m_n_child = -1; child->m_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.
|
1.3.9.1