#include<stdio.h> #include<stdlib.h> struct BTNode { int data; struct BTNode *pLchild;//左子树 struct BTNode *pRchild;//右子树 }; void PreTraverseBTree(struct BTNode *pT); void InTraverseBTree(struct BTNode *pT); void PostTraverseBTree(struct BTNode *pT); struct BTNode *CreatBTree(); int main() { struct BTNode *pT = CreatBTree(); PreTraverseBTree(pT);//先序 printf("\b.\n"); InTraverseBTree(pT);//中序 printf("\b.\n"); PostTraverseBTree(pT);//后序 printf("\b.\n"); return 0; } void PreTraverseBTree(struct BTNode *pT) { /*先访问根结点 再先序访问左子树 再先序访问右子树 */ if(NULL != pT) { printf("%c,",pT->data); if(NULL != pT->pLchild) { PreTraverseBTree(pT->pLchild); } if(NULL != pT->pRchild) { PreTraverseBTree(pT->pRchild); } } } void InTraverseBTree(struct BTNode *pT) { /*先中序访问左子树 再访问根结点 再中序访问右子树 */ if(NULL != pT) { if(NULL != pT->pLchild) { InTraverseBTree(pT->pLchild); } printf("%c,",pT->data); if(NULL != pT->pRchild) { InTraverseBTree(pT->pRchild); } } } void PostTraverseBTree(struct BTNode *pT) { /*先后序访问左子树 再后序访问右子树 再访问根结点 */ if(NULL != pT) { if(NULL != pT->pLchild) { PostTraverseBTree(pT->pLchild); } if(NULL != pT->pRchild) { PostTraverseBTree(pT->pRchild); } printf("%c,",pT->data); } } struct BTNode *CreatBTree() { struct BTNode *pA = (struct BTNode *)malloc(sizeof(struct BTNode)); struct BTNode *pB = (struct BTNode *)malloc(sizeof(struct BTNode)); struct BTNode *pC = (struct BTNode *)malloc(sizeof(struct BTNode)); struct BTNode *pD = (struct BTNode *)malloc(sizeof(struct BTNode)); struct BTNode *pE = (struct BTNode *)malloc(sizeof(struct BTNode)); pA->data = 'A'; pB->data = 'B'; pC->data = 'C'; pD->data = 'D'; pE->data = 'E'; pA->pLchild = pB; pA->pRchild = pC; pB->pLchild = pB->pRchild = NULL; pC->pLchild = pD; pC->pRchild = NULL; pD->pLchild = NULL; pD->pRchild = pE; pE->pLchild = pE->pRchild = NULL; return pA; }