1. 原理图: 
  2.  
  3. 源程序代码: 
  4.  
  5. //PostOrderTraverse.cpp 
  6. //This function is to postorder BiTree 
  7. # include <malloc.h> 
  8. # include <iostream> 
  9. # include <conio.h> 
  10. # define OK 1 
  11. # define ERROR 0 
  12.  
  13. using namespace std; 
  14.  
  15. typedef char TElemType; 
  16.  
  17. typedef struct BiTNode  //define structure BiTree 
  18. {  TElemType data; 
  19.    struct BiTNode *lchild,*rchild; 
  20. }BiTNode, *BiTree; 
  21.  
  22. int CreateBiTree(BiTree &T) //createBiTree() sub-function 
  23. {  TElemType ch; 
  24.    cout<<"Please input data (/ for NULL node!) : "
  25.    cin>>ch; 
  26.    if(ch=='/')  T=NULL; 
  27.    else 
  28.    {  if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) 
  29.       {  cout<<"Overflow!"//no alloction 
  30.   return (ERROR); 
  31.       } 
  32.       T->data=ch; 
  33.       CreateBiTree(T->lchild); //create lchild 
  34.       CreateBiTree(T->rchild);  //create rchild 
  35.    } 
  36.    return (OK); 
  37. //CreateBiTree() end 
  38.  
  39. int PostOrderTraverse(BiTree T) //PostOrderTraverse() sub-function 
  40.    if(T) 
  41.    {  if (PostOrderTraverse(T->lchild))  //traverse lchild 
  42.      if(PostOrderTraverse(T->rchild)) //traverse rchild 
  43.      {    cout<<T->data<<"->";  //visite T 
  44.        return (OK); 
  45.         } 
  46.  return (ERROR); 
  47.    } 
  48.    else 
  49.       return (OK); 
  50. //PostOrderTraverse() end 
  51. int   CentralOrderTraverse(BiTree  T) 
  52.   if(T) 
  53.      {  if (CentralOrderTraverse(T->lchild))  //traverse lchild 
  54.      {  cout<<T->data<<"->";  //visite T 
  55.        if(CentralOrderTraverse(T->rchild)) //traverse rchild 
  56.           return (OK); 
  57.      } 
  58.       return (ERROR); 
  59.      } //if end 
  60.    else 
  61.       return (OK); 
  62. int  preOrderTraverse(BiTree T) 
  63.   if(T) 
  64.    {    cout<<T->data<<"->";  //visite T 
  65.        if (PostOrderTraverse(T->lchild))  //traverse lchild 
  66.      if(PostOrderTraverse(T->rchild))  
  67.         return OK; //traverse rchild 
  68.       return (ERROR); 
  69.    } 
  70.    else 
  71.       return (OK); 
  72. int main()   //main() function 
  73. {  BiTree T; 
  74.    cout<<endl<<endl<<"PostOrderTraverse.cpp"
  75.    cout<<endl<<"========================="
  76.    cout<<endl<<endl<<"Please input data to create BiTree:"<<endl; 
  77.    CreateBiTree(T);  //call CreateBiTree 
  78.    std::cout<<"先序遍历:"<<endl; 
  79.    PostOrderTraverse(T); 
  80.    std::cout<<"中序遍历:"<<endl; 
  81.    CentralOrderTraverse(T);   
  82.    std::cout<<"后序遍历:"<<endl; 
  83.    preOrderTraverse(T);   
  84.    cout<<"End !"<<endl<<endl<<"...OK!..."
  85.    getch(); 
  86.    return 0; 
  87. //main() 
  88.  
  89.