Red de conocimiento informático - Material del sitio web - Cómo construir el árbol binario correspondiente, programación~~~~~~~

Cómo construir el árbol binario correspondiente, programación~~~~~~~

//Conozca el post-order y el in-order, construya un árbol binario

#include

#define MAX_NODE_NUM (100)

typedef struct Node{

char id;

struct Node* pLeft;

struct Node* pRight;

} Nodo;

estructura typedef

{

Nodo* Elem[MAX_NODE_NUM];

int top;

}NodeStack ;

Nodo* pTree=NULL;

Nodo* MakeTree(char* pInorder, char* pPostOrder, int nNode)

{

char root;

int i;

if(nNode==0) return NULL;

root =pPostOrder[nNode-1 ];

i=strchr(pInorder,root);

root-='A';

pTree[root].pLeft=MakeTree(pInorder, pPostOrder,i);

pTree[raíz].pRight=MakeTree(pInorder+i+1,pPostOrder+i,nNode-1-i);

return &pTree[raíz] ;

}

visita nula(Nodo* pNodo)

{

putchar(pNodo->id);

}

void PreOrderUnrec(Node* pRoot)

{

Node* p=pRoot;

NodeStack s;

s.top=0;

mientras (p!=NULL || s.top)

{

mientras (p! =NULL) // Recorre el subárbol izquierdo

{

visit(p);

s.Elem[++s.top]=p; / push

p=p->pLeft

}

if (s.top)

{

p=s .Elem[s.top--]; // pop

p=p->pRight

}

}

}

int main()

{

orden de caracteres[MAX_NODE_NUM];

orden de caracteres[MAX_NODE_NUM] ;

int i=0,nNode=0;

Nodo* pRoot=NULL;

inor

der[0]=0;

postorder[0]=0;

__START:

printf("Ingrese el número de nodo:");

scanf("%d",&nNodo);

if(nNodo<=0)

{

printf("Entrada no válida .\n");

ir a __START;

}

pTree = (Node*)malloc(nNode*sizeof(Node));

for(i=0;i

{

pTree[i].id='A'+i;

pTree[i].pLeft=pTree[i].pRight=NULL;

}

printf("Por favor, ingrese en orden (A-Z):");

scanf("%s",inorder);

if(nNode!=strlen(inorder))

{

printf("Entrada no válida. \n");

goto __START;

}

printf("Por favor, coloque el postorder(A-Z):");

scanf("%s",postorder);

if(nNode!=strlen(postorder))

{

printf("Entrada no válida.\n ");

ir a __START;

}

pRoot=MakeTree(inorder,postorder,nNode);

//PreOrderUnrec( pRoot);

}