1、前序遍历
/* 二叉树的前序遍历递归算法 */
void PreOrderTraverse(BiTree T)
{
if(T == NULL)
return;
cout<<T->data; // 显示结点数据,可以更改为其他对结点操作
PreOrderTraverse(T->lchild); // 再先序遍历左子树
PreOrderTraverse(T->rchild); // 最后先序遍历右子树
}
2、中序遍历
/* 二叉树的中序遍历递归算法 */
void InOrderTraverse(BiTree T)
{
if(T == NULL)
return;
InOrderTraverse(T->lchild); // 中序遍历左子树
cout<<T->data; // 显示结点数据,可以更改为其他对结点操作
InOrderTraverse(T->rchild); // 最后中序遍历右子树
}
3、后序遍历
/* 二叉树的后序遍历递归算法 */
void PosOrderTraverse(BiTree T)
{
if(T == NULL)
return;
PosOrderTraverse(T->lchild); // 先后序遍历左子树
PosOrderTraverse(T->rchild); // 再后序遍历右子树
cout<<T->data; // 显示结点数据,可以更改为其他对结点操作
}
二叉树的构建
1、建立二叉树运用到的原理和遍历二叉树的一样,只是在原来应该是打印结点的地方改成了生成结点,给结点赋值而已。
例: 用前序遍历的方式实现二叉树的建立
/* 按前序输入二叉树中结点的值(一个字符) */
/* #表示空树,构造二叉链表表示二叉树T. */
void CreateBiTree(BiTree &T)
{
TElemType ch;
cin>>ch;
if(ch == '#')
T = NULL; // 递归结束,建空树
else // 递归创建二叉树
{
T = new BiTNode; // 生成根结点
T -> data = ch; // 根结点数据域置为ch
CreateBiTree(T -> lchild); // 递归创建左子树
CreateBiTree(T -> rchild); // 递归创建右子树
}
}
/* 先序凹入法显示二叉树 */
void ShowBiTree(BiTree T,int cc) // cc的初值为 当前二叉树的结点数count
{
int i;
if(T)
{
// 右对齐输出:
// int j;
// for(i=0;i<count-cc;i++) cout<<" ";
// for(j=0;j<cc;j++) cout<<"#";
// cout<<":"<<T->data<<endl;
cout<<T->data<<":";
for(i=0;i<cc;i++) cout<<"#";
cout<<endl;
cc--;
ShowBiTree(T->lchild,cc);
ShowBiTree(T->rchild,cc);
}
}