题解 | 二叉树 nan

二叉树

https://www.nowcoder.com/practice/f74c7506538b44399f2849eba2f050b5

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
using namespace std;

int main() {
	int n, m;
	
		scanf("%d%d", &m, &n);  // 根 结点最大值
		

		int i = 1; // 获取层数
		int begin_level;  // 存储子树的根在第几层
		int final_level;  // 大树总共有几层
		// 2^(i-1) - 2^i-1
		// 1<<i ==> 2^i
		while (1) {
			if (m >= 1 << (i - 1) && m < 1 << i) {
				begin_level = i;
			}
			if (n >= 1 << (i - 1) && n < 1 << i) {
				final_level = i;
				break;
			}
			i++;
		}


		// 找m的最左/最右孩子结点编号
		int left_side = m;
		int right_side = m;
		for (i = begin_level; i < final_level;i++) {
			left_side = 2 * left_side;
			right_side = 2 * right_side + 1;
		}

		int treeNum;
		// left_side > n  说明 实际的最左、最有孩子在倒数第2层
		// 子树是一颗 从begin_level - final_level-1 满二叉树
		if (left_side > n) {
			treeNum = (1 << (final_level - begin_level)) - 1;
		}
		else if(n <= right_side) {
			treeNum = (1 << (final_level - begin_level)) - 1;
			treeNum += n - left_side + 1;
		}
		else {
			treeNum = (1 << (final_level - begin_level + 1)) - 1;
		}
		printf("%d\n",treeNum);
	
	return 0;
}

2025考研复试 文章被收录于专栏

复试ing,努力中。。。

全部评论

相关推荐

如题,这操作。。。。
真烦好烦真烦:既想享受国家的招聘应届生福利,又不想培养新人,我只能说这种企业的ld太过分了
投递美的集团等公司6个岗位 >
点赞 评论 收藏
分享
渐好:软光栅真的写明白了吗,既然是软渲那技术栈不应该使用OpenGL,光追和bvh既不算什么高级渲染技术更不应该属于软渲的内容,git那个项目没啥用,建议把前两个项目重新组织一下语言,比如软渲染那个项目 冯着色和msaa、贴图这几项分开写,写的到位点,如果你还学过光追那就单独写出来,如果没把握考官问你答不上来就别写给自己找麻烦,在技术栈那一栏简单提一下自己学过就行,这样杂的放在一起不太严谨,个人愚见.
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务