Red de conocimiento informático - Conocimiento del nombre de dominio - Un programa para construir un árbol binario y recorrerlo jerárquicamente

Un programa para construir un árbol binario y recorrerlo jerárquicamente

#includelt;iostream.hgt;

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()

{

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);

}

int btree::treeLeavesCount()

{

return hojasCount(raíz);

}

int btree :: theNodeCount()

{

devuelve nodeCount(raíz);

}