pat1004Counting Leaves (30)

1011 ワード

題意分析:
(1)ツリー内のノードの総数および非リーフノードの総数を与え,各非リーフノードの番号,その子ノードの個数,その子ノードの番号を与え,各層のリーフノードの個数を求める
(2)各層の葉の結点数を求めることを意味し,次に与えられるノードの親子関係は明確であり,層順遍歴方式を用いるべきである.
(3)層順遍歴中にノードを格納するキューでfrontとrearポインタの間にtagポインタを用いてfrontポインタからrearポインタの間のノードが同じ層にあることをマークし、カウントを開始する必要がある.実際、このtagは、前の親ノードのすべての子供ノードがエンキューされた後のrearポインタの位置であり、これらの子供ノードは同じレベルにある.
可能なピット:
(1)数の格納にはVectorを使用してもよいし、2次元配列を使用してもよい.ここではツリーノードが大きくないため、直接2次元配列を採用するのが便利である.ノード数が多い場合はVectorを使用することを推奨する.そうしないとメモリの浪費やオーバーフローを引き起こす可能性がある
#include 

using namespace std;
int node[100][100]={0};
int array[100];
int main()
{
    int N,M,ID,K;
    cin>>N>>M;
    int i=0;
    while(i>ID>>K;
        int j=0;
        while(j>node[ID][j];
            j++;
        }
        i++;
    }
    array[0]=1;
    int first=1;
    int front=0,rear=1;
    while(front