数据结构实验之二叉树的建立与遍历
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。
输入
输入一个长度小于50个字符的字符串。
输出
输出共有4行:
第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。
示例输入
abc,,de,g,,f,,,
示例输出
cbegdfa
cgefdba
3
5
提示
来源
ma6174
#include<bits/stdc++.h>
using namespace std;
typedef struct node
{
char data;
struct node *lchild ,*rchild;
} BiTnode,*BiTree;
int Ldep=0,Rdep=0;
int createBiTree(BiTree &T)
{
char ch;
cin>>ch;
if(ch==',') T=NULL;
else
{
T=(BiTnode *)malloc(sizeof(BiTnode ));
if(!T) exit(0);
T->data=ch;
createBiTree(T->lchild);
createBiTree(T->rchild);
}
return 0;
}
void visit(BiTree T)
{
if(T->data!=',')
cout<<T->data;
}
void midorder(BiTree T)
{
if(T)
{
midorder(T->lchild);
visit(T);
midorder(T->rchild);
}
}
void post(BiTree T)
{
if(T)
{
post(T->lchild);
post(T->rchild);
visit(T);
}
}
int leaf(BiTree T,int &cunt)
{
if(T)
{
if(T->lchild==NULL&&T->rchild==NULL)
{
cunt++;
}
leaf(T->lchild,cunt);
leaf(T->rchild,cunt);
}
return cunt;
}
int depth(BiTree T)
{
int deep=0;
if(T)
{
int Ldep=depth(T->lchild);
int Rdep=depth(T->rchild);
deep=Ldep>=Rdep?Ldep+1:Rdep+1;
}
return deep;
}
int main()
{
BiTree T;
int cunt=0;
createBiTree(T);
midorder(T);
cout<<endl;
post(T);
cout<<endl;
cout<<leaf(T,cunt)<<endl;
cout<<depth(T)<<endl;
}