其实建立的方式和遍历是一个意思.也是利用了递归的原理.只不过在原来应该是输出结点的地方,改成了生成结点,然后给这个结点进行赋值操作。所以理解了遍历就很容易理解建立.
1 #include "stdafx.h" 2 #include <iostream> 3 #include <exception> 4 #include<string> 5 using namespace std; 6 7 8 typedef char TElemType; 9 10 typedef struct BiTNode 11 { 12 TElemType data; 13 struct BiTNode *left,*right; 14 }BiTNode,*BiTree; 15 16 //前序遍历 17 void PreOrderTraverse(BiTree T) 18 { 19 if(T==NULL) return; 20 cout<<T->data<<" ";//显示该结点的数据 21 PreOrderTraverse(T->left); 22 PreOrderTraverse(T->right); 23 } 24 //中序遍历 25 void InOrderTraverse(BiTree T) 26 { 27 if(T==NULL) return ; 28 InOrderTraverse(T->left); 29 cout<<T->data<<" "; 30 InOrderTraverse(T->right); 31 } 32 33 //后序遍历 34 void PostOrderTraverse(BiTree T) 35 { 36 if(T==NULL) return ; 37 InOrderTraverse(T->left); 38 InOrderTraverse(T->right); 39 cout<<T->data<<" "; 40 } 41 42 //建立二叉树 43 void CreateBiTree(BiTree *T) 44 { 45 TElemType ch; 46 cin>>ch; 47 if(ch==‘#‘) 48 { 49 *T=NULL; 50 }else 51 { 52 *T=(BiTree)malloc(sizeof(BiTree)); 53 if(!*T) 54 exit(OVERFLOW); 55 (*T)->data = ch; 56 CreateBiTree(&(*T)->left); 57 CreateBiTree(&(*T)->right); 58 } 59 } 60 int _tmain(int argc, _TCHAR* argv[]) 61 { 62 BiTree *T; 63 T=(BiTree*)malloc(sizeof(BiTree)); 64 CreateBiTree(T); 65 cout<<"前序遍历:"; 66 PreOrderTraverse(*T); 67 cout<<"中序遍历:"; 68 InOrderTraverse(*T); 69 cout<<"后序遍历:"; 70 PostOrderTraverse(*T); 71 return 0 ; 72 }
前序遍历输入:AB#D##C##就实现了.
原文:http://www.cnblogs.com/crazycodehzp/p/3544364.html