北京大学复试上机题(二叉树)
可采用分治的方法,先统计m点的节点数,然后递归地统计m左子树和右子树的节点数,当节点编号大于n时,递归返回。
#include <bits/stdc++.h>
using namespace std;
int sum = 0; // 欲输出的节点总数
void nodeNum(int n, int m) {
if (m > n) return;
++sum; // 统计本节点
nodeNum(n, 2*m); // 统计左子树节点和右子树节点数
nodeNum(n, 2*m + 1);
}
int main() {
int n, m;
while (scanf("%d %d", &m, &n) != EOF) {
nodeNum(n, m);
printf("%d\n", sum);
}
return 0;
}


京公网安备 11010502036488号