首页 > 代码库 > 九度 1113 关于二叉树节点的个数问题
九度 1113 关于二叉树节点的个数问题
#include <stdio.h> #include <math.h> int main() { int n,m,left,right; int count; int deep_n,deep_m,deep_diff; int i, j; for( scanf("%d%d",&m,&n); n!=0 && m!=0; scanf("%d%d",&m,&n) ) { count = 0; left = right = m; deep_n = (int)(log(n)/log(2)+1); //节点n的深度 deep_m = (int)(log(m)/log(2)+1); //节点m的深度 deep_diff = deep_n - deep_m; //两者的深度之差 //其实可以将m节点看成一个独立的子树的根节点,就能理解此处所想表达的意思了 //深度为deep的二叉树的节点个数为2^deep-1个,这样会好理解一点 count += (int)pow(2,deep_diff) - 1; for(i=1;i<=deep_diff;++i) { left = 2*left; right = 2*right+1; } if(right<=n) count += right - left + 1; else if(left<=n) count += n - left + 1; printf("%d\n",count); } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。