Un programa para construir un árbol binario y recorrerlo jerárquicamente
struct bnode
{
datos de caracteres;
struct bnode *lchild;
struct bnode *rchild;
int ltag, rtag; //banderas de pista izquierda y derecha
};
clase btree
{
público:
btree();
~btree();
void create(bnode *amp; p ); //crea un árbol binario en orden anterior
void create(char s[], bnode *amp; p, int i); //crea un árbol binario a partir de una matriz
const btreeamp; operator = (const btreeamp;); //overload=
bool isEmpty(); //determinar no nulo
void preorderTraversal();
void postorderTraversal(); //post-orden
void inorderTraversal(); // Nivel intermedio
void inTravAndShow(bnode *p); Recorrido intermedio y salida, muestra el número de niveles
int treeHeight(); // La altura del árbol
int theNodeCount();
int treeLeavesCount ( ); //número de nodos hoja
void destroyTree(); //eliminar árbol
void changeLR(bnode *amp; p); //intercambiar nodos secundarios izquierdo y derecho entre cada nodo
//protegido:
bnode *root;
privado:
void destroy(bnode *p); ?
void inorder(bnode *p);
void preorder(bnode *p>
void postorder(bnode *p);
int altura(bnodo *p);
int max (int x, int y
int nodoCount(bnodo *p); int leavesCount (bnode *p);
};
/*************************** ***** ******************* *
********************* ***** **********************/
i
nt Layer=0; //Número de capas
bnode *pre=NULL; //Puntero global
int maxlength=26 //Longitud máxima de la matriz
char s[]={'a', 'b', 'c', 'd', ' ', ' ', ' ', ' ', ' '};
/** * ************************************************* ** *
******* ********************************** ** *************/
void btree::create(bnode *amp;p)
{
/* Crea un árbol binario en orden de precedencia. Si los nodos secundarios izquierdo y derecho están vacíos, ingrese '.*/
char x;
cingt;gt;x;
if(x== '. ') p=NULL;
else
{
p=nuevo bnodo;
p-gt;data=x ;
crear(p-gt;lchild);
crear(p-gt;rchild
}
}
void btree::create(char s[], bnode *amp; p, int i)//llamado con i=1
{
if( s[ i-1]==' '||igt; longitud máxima 1) p=NULL
else
{
p=nuevo bnodo;
p-gt; datos=s[i-1];
crear(s, p-gt; lchild, 2*i); s, p-gt; rchild, 2*i 1);
}
}
bool btree::isEmpty() p>
{
return (root==NULL);
}
void btree::preorderTraversal()
{
preorder(root);
}
void btree::inorderTraversal()
{
inorder( raíz);
}
void btree: .postorderTraversal()
{
postorder(raíz);
}
int btree::treeHeight()
{
return altura(raíz);
} p>
int btree::treeLeavesCount()
{
return hojasCount(raíz);
}
int btree :: theNodeCount()
{
devuelve nodeCount(raíz);
}