#include<bits/stdc++.h>
using namespace std;
typedef struct tree
{
char data;
struct tree *l ,*r;
}tree,*bitree;
char ch;
void jianli(bitree &t)
{
cin>>ch;
if(ch=='#') t=NULL;
else
{
t=new tree;
t->data=ch;
jianli(t->l);
jianli(t->r);
}
return;
}
void qian(bitree t)
{
if(t)
{
cout<<t->data;
qian(t->l);
qian(t->r);
}
}
void zhong(bitree t)
{
if(t)
{
zhong(t->l);
cout<<t->data;
zhong(t->r);
}
}
void hou(bitree t)
{
if(t)
{
hou(t->l);
hou(t->r);
cout << t->data;
}
return;
}
stack<bitree> s;
void zhongfei(bitree t)
{
bitree p,q;
p=t;
q=new tree;
while(p||!s.empty())
{
if(p)
{
s.push(p);
p=p->l;
}
else
{
q=s.top();
s.pop();
cout<<q->data;
p=q->r;
}
}
return;
}
int dp(bitree t)
{
int m, n;
if(t==NULL) return 0;
else
{
m=dp(t->l);
n=dp(t->r);
if(m>n) return m+1;
else return n+1;
}
}
int jie(bitree t)
{
if(t==NULL) return 0;
else return jie(t->l)+jie(t->r)+1;
}
int main()
{
bitree t;
jianli(t);
cout<<"输出前序遍历结果:";
qian(t);
cout<<endl;
cout<<"输出中序遍历结果:";
zhong(t);
cout<<endl;
cout<<"输出后序遍历结果:"<<endl;
hou(t);
cout<<endl;
cout<<"输出非递归中序遍历结果:";
zhongfei(t);
cout<<"输出树的深度:";
cout<<dp(t)<<endl;
cout<<"输出树的节点个数:";
cout<<jie(t)<<endl;
return 0;
}