腾讯笔试完全二叉排序树

大家看一下我的解法,有没有问题,可以一起讨论一下~大致的思路就是找到最大数和最小数之间的2的最大幂次的倍数。
从最大的2^(k-1)次幂开始除起,看在哪一个幂次时max/2^i不等于min/2^i,就说明公共根节点时2^i的倍数
// tencent_BST.cpp : Defines the entry point for the console application.
//

#include<stdio.h>
#include<math.h>
int main()
{
	int k, a, b, c;
	scanf("%d %d %d %d",&k,&a,&b,&c);
	int i = k - 1;
	int tempmax = a>b ? a : b;
	int max = tempmax > c ? tempmax : c;
	int tempmin = a < b ? a : b;
	int min = tempmin < c ? tempmin : c;//求最大最小值
	while (i >= 0)
	{
		int tempa = max / (int)pow(2, i);
		int tempb = min / (int)pow(2, i);
		if (tempa == tempb)
			i--;
		else
			break;
	}//找到根节点是2^i的倍数
      printf("%d\n",(int)((max/(int)pow(2,i))*pow(2,i)));
     return 0;
}

全部评论
不建议使用pow,有精度误差。2的幂用位运算。
点赞 回复 分享
发布于 2017-04-04 08:31
思路应该没问题。昨天就是把第二题写了。这个二叉树没写。真伤心
点赞 回复 分享
发布于 2017-04-04 10:11
你的pow可以定义一个变量存着,然后每次除以2..
点赞 回复 分享
发布于 2017-04-04 12:26
很多子树根节点不是2^i的倍数呢。这样做可能不行? 可以从根节点往下,根据BST的性质,二分寻找。
点赞 回复 分享
发布于 2017-04-04 16:58
#include <iostream> #include <math.h> using namespace std; int main() {     int k,a,b,c;     cin>>k>>a>>b>>c;     int i = 1,j = pow(2,k)-1;     int mid;     while(true)     {         mid = (i + j) / 2;         if(a < mid && b < mid && c < mid)         {             j = mid - 1;             continue;         }         if(a > mid && b > mid && c > mid)         {             i = mid + 1;             continue;         }         break;     }     cout<<mid<<endl;     return 0; }
点赞 回复 分享
发布于 2017-04-04 20:36

相关推荐

01-07 07:54
已编辑
门头沟学院 前端工程师
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 听劝,这个简历怎么改 #
14081次浏览 182人参与
# 面试被问“你的缺点是什么?”怎么答 #
6359次浏览 98人参与
# 水滴春招 #
16306次浏览 346人参与
# 入职第四天,心情怎么样 #
11280次浏览 63人参与
# 租房找室友 #
8005次浏览 53人参与
# 读研or工作,哪个性价比更高? #
26151次浏览 356人参与
# 职场新人生存指南 #
199185次浏览 5509人参与
# 参加完秋招的机械人,还参加春招吗? #
26977次浏览 276人参与
# 文科生还参加今年的春招吗 #
4108次浏览 31人参与
# 简历无回复,你会继续海投还是优化再投? #
48619次浏览 561人参与
# 你见过最离谱的招聘要求是什么? #
144708次浏览 829人参与
# 如果重来一次你还会读研吗 #
155714次浏览 1706人参与
# 机械人选offer,最看重什么? #
69076次浏览 449人参与
# 选择和努力,哪个更重要? #
44269次浏览 492人参与
# 如果再来一次,你还会学硬件吗 #
103643次浏览 1245人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
20519次浏览 413人参与
# 招聘要求与实际实习内容不符怎么办 #
46703次浏览 494人参与
# 22届毕业,是读研还是拿外包offer先苟着 #
4652次浏览 27人参与
# 你们的毕业论文什么进度了 #
901211次浏览 8960人参与
# 软开人,你觉得应届生多少薪资才算合理? #
81371次浏览 496人参与
# 国企还是互联网,你怎么选? #
109189次浏览 853人参与
牛客网
牛客企业服务