所谓遍历,即按照某种规律或顺序访问树中的全部节点,且每个节点只访问一次。
在访问节点信息时输出节点中的信息。
标准二叉树包括左、右、根三个部分,则我们可以通过递归的方法来访问输中的信息。
二叉树的遍历主要分为:1、先序遍历:根——左——右
2、中序遍历:左——根——右
3、后续遍历:左——右——根
太多的文字信息不如直接上代码理解,所以直接上代码:
#include <iostream>
using namespace std;
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTNode *createBiTree()//创建树
{
BiTNode *T;
char data;
cin>>data;
if(data=='#') T=NULL;//这里的#是让程序知道在创建时#的位置表示空
else
{
T=(BiTNode*)malloc(sizeof(BiTNode));
T->data=data;
T->lchild=createBiTree();
T->rchild=createBiTree();
}
return T;
}
void visit(BiTNode *T)//输出
{
if(T->data!='#')
{
cout<<T->data<<" ";
}
}
void preorder(BiTNode *T)//先序
{
if(T!=NULL){
visit(T);
preorder(T->lchild);
preorder(T->rchild);
}
}
void postorder(BiTNode *T)//后序
{
if(T!=NULL)
{
postorder(T->lchild);
postorder(T->rchild);
visit(T);
}
}
void Inorder(BiTNode *T)//中序
{
if(T!=NULL)
{
Inorder(T->lchild);
visit(T);
Inorder(T->rchild);
}
}
int main()
{
BiTNode *T;
T=createBiTree();
cout<<"先序:";
preorder(T);
cout<<endl;
cout<<"中序:";
Inorder(T);
cout<<endl;
cout<<"后续:";
postorder(T);
}