依次输入:
1 2 4 0 0 5 0 0 3 0 0
表示构造一个深度为3的完全二叉树
#include"iostream"
#include"functional"
#include"stdio.h"
using namespace std;
typedef struct BiTNode{
int data;
BiTNode *lchild;
BiTNode *rchild;
}BiTNode,* BiTree;
void InitBiTree(BiTree&T);
void CreateBiTree(BiTree&T);
void PreOrderTraverse(BiTree&T);
void InOrderTraverse(BiTree &T);
void PostOrderTraverse(BiTree &T);
int main(){
BiTree bitree;
InitBiTree(bitree);
CreateBiTree(bitree);
cout<<"PreOrderTraverse"<<endl;
PreOrderTraverse(bitree);
cout<<"InOrderTraverse"<<endl;
InOrderTraverse(bitree);
cout<<"PostOrderTraverse"<<endl;
PostOrderTraverse(bitree);
system("pause");
return 0;
}
void InitBiTree(BiTree&T){
T=NULL;
}
void CreateBiTree(BiTree&T){
int element;
cin>>element;
//如果输入为0,就结束这个节点的输入了
if(element == 0){
T = NULL;
}else{
T = (BiTree)malloc(sizeof(BiTNode));
T->data = element;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void PreOrderTraverse(BiTree &T){
if(T){
cout<<T->data<<endl;
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree &T){
if(T){
InOrderTraverse(T->lchild);
cout<<T->data<<endl;
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree &T){
if(T){
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
cout<<T->data<<endl;
}
}