i***j 发帖数: 104 | 1 现有以下数列,是depth based.第一列是数列次序,第二列是指某点有几个分叉。请看
以下图片。
问题是如何将此数列装换成右边那种形式。有没有高手能指点一下,不知道怎么用写(
perl).先谢
谢了。
1 1
2 1
3 2
4 2
5 2
6 0
7 0
8 2
9 0
10 0
11 0 | X****r 发帖数: 3557 | 2 右边第一行应该是1->2,不是1->1吧。
我不懂perl,不过这个程序实在简单,用C写一个也就几行:
int expand(int input[], int output[][2], int start) {
int branch, end = start + 1;
for (branch = 0; branch < input[start]; ++branch) {
output[start][branch] = end;
end = expand(input, output, end);
}
return end;
}
验证程序:
#include
#include
#define MAX 100
int main(int argc, char *argv[]) {
int input[MAX], output[MAX][2] = {0};
int i;
for (i = 1; i < argc; ++i) {
input[i] = atoi(argv[i]);
}
printf("Total = %d\n", expand(input, output, 1) - 1);
for (i = 1; i < argc; ++i) {
printf("%d: %d %d\n", i, output[i][0], output[i][1]);
}
return 0;
}
补充:如果不是二叉树把2换成最大分叉数即可。
【在 i***j 的大作中提到】 : 现有以下数列,是depth based.第一列是数列次序,第二列是指某点有几个分叉。请看 : 以下图片。 : 问题是如何将此数列装换成右边那种形式。有没有高手能指点一下,不知道怎么用写( : perl).先谢 : 谢了。 : 1 1 : 2 1 : 3 2 : 4 2 : 5 2
|
|