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