PTA列出叶结点 (25 分)
Posted karshey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PTA列出叶结点 (25 分)相关的知识,希望对你有一定的参考价值。
输入:
8
1 -
- -
0 -
2 7
- -
- -
5 -
4 6
输出:
4 1 5
用结构体存树。
代码:
#include<bits/stdc++.h>
using namespace std;
struct node
{
int left,right;
}tree[15];
int a[11];
int main()
{
int n;
cin>>n;
char c1,c2;
for(int i=0;i<n;i++)
{
cin>>c1>>c2;
if(c1!='-')
{
tree[i].left=c1-'0';
a[c1-'0']=1;
}
else tree[i].left=-1;//表示无孩子
if(c2!='-')
{
tree[i].right=c2-'0';
a[c2-'0']=1;
}
else tree[i].right=-1;
}
//寻找根结点,无父母
int root;
for(int i=0;i<n;i++)
{
if(a[i]==0)
{
root=i;
break;
}
}
//STL的queue
queue<int>q;
q.push(root);
int flag=0;
while(q.size()>0)
{
root=q.front();//当前根是队头
q.pop();//删除
if(tree[root].left==-1&&tree[root].right==-1)//是叶子节点
{
if(flag) cout<<" "<<root;
else
{
flag=1;
cout<<root;
}
}
else
{
if(tree[root].left!=-1)//有孩子,从左开始遍历
{
q.push(tree[root].left);
}
if(tree[root].right!=-1)
{
q.push(tree[root].right);
}
}
}
return 0;
}
以上是关于PTA列出叶结点 (25 分)的主要内容,如果未能解决你的问题,请参考以下文章