求叶子节点

给出一棵n个节点的树,节点编号为1-n(根节点编号为1),求这棵树叶子结点的数量。

例如:

1─2─4─5
└─3

其中3和5是叶子节点,输出2。

Input第一行:1个数n(1 < n <= 1000),表示树的节点数量。 后面n-1行:每行2个数x y,表示节点x是节点y的父节点(1 <= x, y <= n)。Output输出1个数,表示这棵树有多少个叶子节点。Sample Input

5
1 2
1 3
2 4
4 5

Sample Output

2

有多种解法
一:假设全为叶子节点,数组记录不是叶子节点,相减即可
#include<bits/stdc++.h>
using namespace std;
const int maxn=1010;
int a[maxn];
int main()
{
    int n,x,y,sum;
    memset(a,0,sizeof(a));
    cin>>n;
    sum=0;
    for(int i=1;i<n;i++)
    {
        cin>>x>>y;
        if(a[x]==0)
        {
            a[x]++;
            sum++;
        }
    }
    cout<<n-sum<<endl;
    return 0;
 } 

二:根据图的存储,行为出度,列为入度,

#include<bits/stdc++.h>
using namespace std;
const int maxn=1010;
bool a[maxn][maxn];
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<n;i++)
    {
        int x,y;
        cin>>x>>y;
        a[x][y]=1;
    }
    int cnt=0;
    for(int i=1;i<n;i++)
    {
        bool flag=0;
        for(int j=1;j<n;j++)
            if(a[i][j]) flag=1;
        if(flag==0) cnt++;
    }
    cout<<cnt<<endl;
    return 0;
}

 

posted @ 2020-02-12 12:30  蓉~  阅读(509)  评论(0编辑  收藏  举报