先序遍历:
样例输入
431##2##65##7##
样例输出
4312657
//算法5.1 前序遍历的递归算法
#include <iostream>
using namespace std;
typedef struct BiNode{//二叉链表定义
char data;
struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;
void PreorderTraverse(BiTree T);//先序遍历二叉树T的递归函数声明
void GreatBiTree(BiTree &T);//用算法5.3 先序遍历的顺序建立二叉链表
int main()
{
BiTree T;
GreatBiTree(T);
PreorderTraverse(T);
cout<<endl;
return 0;
}
void GreatBiTree(BiTree &T){
char ch;
cin>>ch;//按先序次序输入二叉树中结点的值(一个字符),创建二叉链表表示的二叉树T
if(ch=='#') T=NULL;//递归结束,建空树
else{
T=new BiTNode ;//生成根结点
T->data=ch;
GreatBiTree(T->lchild); //递归创建左子树
GreatBiTree(T->rchild); //递归创建右子树
}
}
void PreorderTraverse(BiTree T)
{
if(T)
{
cout<<T->data;
PreorderTraverse(T->lchild);
PreorderTraverse(T->rchild);
}
}
//中序
void InorderTraverse(BiTree T)
{
if(T)
{
InorderTraverse(T->lchild);
cout<<T->data;
InorderTraverse(T->rchild);
}
}
//后序
void InorderTraverse(BiTree T)
{
if(T)
{
InorderTraverse(T->lchild);
InorderTraverse(T->rchild);
cout<<T->data;
}
}