分治:即把一个复杂的问题分成两个或多个子问题,子问题之间相互独立且与原问题相同或相似,持续分解,直到最后的子问题可以简单的求解。原问题即子问题解的合并。
由于反复利用分治手段,这就为使用递归策略提供了条件。
解法:采用递归策略,根据二叉树的性质:左子树编号为2m,右子树为2m+1,不断的去计算节点数。
#include <iostream>
using namespace std;
int BinaryTree(int m, int n) {
if(m <= n) {
return 1 + BinaryTree(m * 2, n) + BinaryTree(m * 2 + 1, n);
} else {
return 0; // m > n, end.
}
}
int main() {
int m, n;
while (cin>> m >> n) {
if (m == 0 && n == 0)
break;
cout<< BinaryTree(m, n) <<endl;
}
return 0;
}

京公网安备 11010502036488号