#include<bits/stdc++.h>
#define endl '\n'
#define INF 0x3f3f3f3f
using namespace std;
const int N=55;
struct tree
{
char dat;
int l,r;
}tr[N];
string s;
int tot,idx,cnt,h;
int build()
{
if(s[idx]==',')
{
idx++;
return 0;
}
tr[++tot].dat=s[idx++];
int now=tot;
tr[now].l=build();
tr[now].r=build();
return now;
}
void midprint(int root)
{
if(root)
{
midprint(tr[root].l);
cout<<tr[root].dat;
midprint(tr[root].r);
}
}
void finalprint(int root)
{
if(root)
{
finalprint(tr[root].l);
finalprint(tr[root].r);
cout<<tr[root].dat;
}
}
void dfs(int root)
{
if(root)
{
if(!tr[root].l&&!tr[root].r)
cnt++;
dfs(tr[root].l);
dfs(tr[root].r);
}
}
int gethigh(int root)//树的最大深度
{
if(!root)return 0;
return max(gethigh(tr[root].l),gethigh(tr[root].r))+1;
}
int main()
{
cin>>s;
int root=build();
midprint(root);
cout<<endl;
finalprint(root);
cout<<endl;
dfs(root);
cout<<cnt<<endl;
cout<<gethigh(root)<<endl;
return 0;
}
K - 数据结构实验之二叉树的建立与遍历
最新推荐文章于 2024-10-16 22:43:21 发布