北京大学复试上机题(二叉树)
可采用分治的方法,先统计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; }