#C++实现二叉树的三种遍历方式
这里的话,关于二叉树的遍历有许多优化的算法,还有各种适应环境,这里对于刚学习的人正适合,主要要介绍的是二叉树最常见的三种遍历。
先定义一个二叉树的结构体
#include<cstdlib>
#include<iostream>
using namespace std;
typedef struct BiTNode{
char data;
struct BiTNode *Ichild,*Rchild;
}BiTNode,*BiTree;
创建树:
void CreateBitree(BiTree &T){
char ch;
cin>>ch;
if(ch=='#')
T=NULL;
else
{
T=new BiTNode; //C= T=(BiTNode *)malloc(sizeof(BiTNode))
if(!T) //judge
exit(1);
T->data=ch;
CreateBitree(T->Ichild);
CreateBitree(T->Rchild);
}
}
前序遍历:父节点先于它的子节点被访问,就是先序遍历;
我们老师 给的口诀 根左右
void PreOrderTraverse(BiTree T){
if(!T) //judge this 'T' is or not NULL
return;
cout<<T->data;
PreOrderTraverse(T->Ichild);
PreOrderTraverse(T->Rchild);
}
中序遍历:父节点被访问的次序位于左右孩子节点之间,就是中序遍历
相对应:左根右
void InOrderTraverse(BiTree T){
if(!T)
return;
InOrderTraverse(T->Ichild);
cout<<T->data;
InOrderTraverse(T->Rchild);
}
后序遍历:访问完左右孩子节点之后再访问父节点,就是后序遍历
对应 左右根
void PostOrderTraverse(BiTree T){
if(!T)
return;
PostOrderTraverse(T->Ichild);
PostOrderTraverse(T->Rchild);
cout<<T->data;
}
注意:
不论是先序遍历、中序遍历还是后序遍历,左右孩子节点的相对访问次序是不变的,总是先访问左孩子节点,再访问右孩子节点。而层次遍历,就是按照从上到下、从左向右的顺序访问二叉树的每个节点。
主函数如下:
int main()
{
BiTree T;
CreateBitree(T);
cout<<"Preorder:";
PreOrderTraverse(T);
cout<<endl;
cout<<"Inorder:";
InOrderTraverse(T);
cout<<endl;
cout<<"PostOreder:";
PostOrderTraverse(T);
cout<<endl;
return 0;
}
以上仅供学习参考