原题不贴了,直接上代码
void CreateBiTree(BiTree &T)
{
//按先序次序输入二叉树中结点的值(一个字符),创建二叉链表表示的二叉树T
TElemType ch;
//此处和教材的不同是,要处理多组数据,输入ch如果遇到EOF,应该结束程序
//所以main函数用while(1)
if(!(cin >> ch)) exit(0);
/****在此下面完成代码***************/
if(ch=='#')T=NULL;//依据题意为"#"代表为空树直接让这个节点为NULL
else//不是空树
{
T=new BiTNode;//让T指向一个空间储存数据
T->data=ch;
CreateBiTree(T->lchild);//先序遍历要求先根后左右子树,已经扫了根,则往左扫
CreateBiTree(T->rchild);//扫完左树,接着扫右树
}
/***********************************/
} //CreateBiTree
//用算法5.1 中序遍历的递归算法
void InOrderTraverse(BiTree T)
{
//中序遍历二叉树T的递归算法
/****在此下面完成代码***************/
if(T)
{
InOrderTraverse(T->lchild);//中序遍历要求先扫左树再扫根接着扫右树
cout<<T->data<<" ";
InOrderTraverse(T->rchild);
}
/***********************************/
}
void DestroyBitree(BiTree& T)
{
/****在此下面完成代码***************/
if(T)
{
if(T->lchild)DestroyBitree(T->lchild);
if(T->rchild)DestroyBitree(T->rchild);
free(T);
T=NULL;
}
/***********************************/
}
//跳出本题框架的的二叉树遍历,string版 #include<iostream> #include<algorithm> #include<map> using namespace std; typedef long long ll; const int mod=1e9+7; const int MAX=1e6+10; string a; struct tree { char data; tree* l,* r; }; int ji; void built(tree* &root) { if(ji==a.size())return; char x=a[ji++]; if(x=='#')root=NULL; else { root=new tree; root->data=x; built(root->l); built(root->r); } } void zhongxv(tree *root) { if(root) { zhongxv(root->l); cout<<root->data<<" "; zhongxv(root->r); } } int main() { while(cin>>a) { ji=0; tree *root; built(root); zhongxv(root); cout<<endl; } }
先去了解下什么是三序分别是什么再来做