地址:http://codevs.cn/problem/1501/
第一次接触树。
幸好这题的节点都是一定的,不是随便定下来的。(其实上网查了题解才知道理解错题意了。。)
所以用深搜来做不用想这么多。
不然我暂时也做不了。
#include <iostream>
using namespace std;
int width[10], tree[20][2];
int layernum, widthnum;
void dfs(int i, int layer) {//i是节点的编号
width[layer]++;//每多一个节点,对应层数的宽度加1
if(layer > layernum) layernum = layer;//判断层数的最大值
if(tree[i][0] != 0) dfs(tree[i][0], layer + 1);
if(tree[i][1] != 0) dfs(tree[i][1], layer + 1);
}
int main() {
int n;
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> tree[i][0] >> tree[i][1];
}
layernum = 0;
dfs(1, 1);
for(int i = 1; i <= n; i++) {
if(width[i] > widthnum) widthnum = width[i];
}
cout << widthnum << " " << layernum;
return 0;
}