求叶子节点
给出一棵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; }