假设一棵二叉树如图:
(1)先序遍历 DLR
(2)中序遍历 LDR
(3)后序遍历 LRD
代码实现:
#include<iostream>
using namespace std;
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//初始化
void InitTree(BiTree &T){ //空树
T=NULL;
}
//创建
void CreateBiTree(BiTree &T){
char data;
cin>>data;
if(data!='#'){
T=new BiTNode; //建立根节点
T->data=data; //为根节点赋值
CreateBiTree(T->lchild); //建立左子树
CreateBiTree(T->rchild); //建立右子树
}
else T=NULL;
}
//先序遍历
int PreOrderTraverse(BiTree T){
if(T!=NULL){
cout<<T->data<<' '; //根
PreOrderTraverse(T->lchild); //左
PreOrderTraverse(T->rchild); //右
}
}
//中序遍历
void InOrderTraverse(BiTree T){
if(T!=NULL){
InOrderTraverse(T->lchild); //左
cout<<T->data<<' '; //根
InOrderTraverse(T->rchild); //右
}
}
//后序遍历
void PostOrderTraverse(BiTree T){
if(T!=NULL){
PostOrderTraverse(T->lchild); //左
PostOrderTraverse(T->rchild); //右
cout<<T->data<<' '; //根
}
}
int main(){
BiTree T;
InitTree(T);
cout<<"请输入字符:";
CreateBiTree(T);
cout<<endl<<"先序遍历结果为:";
PreOrderTraverse(T);
cout<<endl<<"中序遍历结果为:";
InOrderTraverse(T);
cout<<endl<<"后序遍历结果为:";
PostOrderTraverse(T);
return 1;
}
运行结果: