微软公司最新面试题

微软公司最新面试题
★如果你有一个许多部件可以拆卸的时钟,你将它一块块拆开,但是没有记住是怎样拆的。

然后你将各个零件重新组装起来,最后发现有三个重要零件没有放进去。

这时你如何重新组装这个时钟?
★如果你需要一门新的.计算机语言,你会怎样做?
★假设由你负责设计比尔。

盖茨的卫生间。

当然,钱不成问题,但是你不可以和比尔谈。

你会怎样做?
★到目前为止,你遇到的最难回答的问题是什么?
★如果微软公司说,我们愿意投资500万美元用来开发你提出的方案。

那么你会做什么?为什么?
★如果你将世界上所有的计算机制造商召集起来,告诉他们必须要做一件事,你会让他们做什么事?
★如果你在五年内会得到一笔奖金,你认为会是因为什么?关注你的成绩的人会是谁?
★你如何教自己的奶奶使用微软Excel表格系统?
★为什么当我们在任何一家宾馆打开热水龙头时,热水会马上流出来?
★你为什么想在微软工作?
★假设你回到家,进入自己的房间,打开电灯开关,可是一点反应都没有——灯没有亮。

这时,你在判断问题出在哪里时,会依次采取怎样的做法?
模板,内容仅供参考。

合集下载

微软面试题

微软面试题

1、微软面试题1--飞机质量问题怎样简单的测量一个飞机的质量?2、微软面试题2--飞机加油问题每个飞机只有一个油箱,飞机之间可以相互加油(注意是相互,没有加油机)一箱油可供一架飞机绕地球飞半圈,问: 为使至少一架飞机绕地球一圈回到起飞时的飞机场至少需要出动几架飞机?(所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中间没有飞机场)3、微软面试题3--钢管取球问题四个男考生在一个房间里,水泥地面上凝着一根钢管(意思是说拔不动、弄不弯),底端封闭,内空,直径比一个乒乓球略大。

房间里有一把剪刀,一根10米长的绳子,请把掉进钢管的乒乓球拿出来4.微软面试题4--杀病狗问题一个大院子里住了50户人家,每家都养了一条狗,有一天他们接到通知说院子里有狗生病了,并要求所有主人在发现自己家狗生病的当天就要把狗枪杀掉。

然而所有主人和他们的狗都不能够离开自己的房子,主人与主人之间也不能通过任何方式进行沟通,他们能做的只是通过窗户观察别人家的狗是否生病从而判断自己的狗病否。

(就是说,每个主人只能看出其他49家的狗是不是生病,单独看自己的狗是看不出来的)第一天没有枪声,第二天还是没有枪声,第三天传出一阵枪声,问有多少条狗被枪杀。

因为是翻译的,所以有些条件不太清楚。

我再说明一下:1。

确实有狗病了,且狗病不会传染。

即病狗数目不变。

2。

相当于每个人无法看见自己的狗,只通过别人的狗的情况来判断。

每个人都绝顶聪明3。

每天每个人只思考一次,也就是说‘一天’只是一个抽象的概念,不要在‘一天上钻牛角尖。

5、微软面试题5--分金链问题及其延伸在《程序员》杂志试刊一中曾刊登过一道微软用来面试的题目:工人为你工作7天,回报为一根金条,必须在每天付给他们一段,且只能截2次,你将如何付费?我们再来看我自己编的一道题目:如何将7块金子放入3个箱子中,使我可以整箱取走任意块数?6、微软面试题6--测流量问题怎样简单的测量亚马逊河的流量?7、微软面试题7--三个灯泡有两间屋,甲和乙,甲屋有三个开关,乙屋有三个灯泡,甲屋是看不到乙屋,而甲屋的每一个开关是控制乙屋的其中一个灯泡,问你怎样可以只停留在甲屋一次,停留在乙屋一次,而可以知道那个开关是控制那个灯泡呢?8、微软面试题8--下水道盖子为什么下水道盖是圆的!!!9、微软面试题9--恐怖隧道赶集的时候突然下起雨来。

微软面试题及答案

微软面试题及答案
8.怎么样种植4棵树木,使其中任意两棵树的距离相等
第二组
1.为什么下水道的盖子是圆的
2.中国有多少辆汽车
3.将汽车钥匙插入车门,向哪个方向旋转就可以打开车锁
4.如果你要去掉中国的34个省(含自治区、直辖市和港澳特区及台湾省)中的任何一个,你会去掉哪一个,为什么
5.多少个加油站才能满足中国的所有汽车
6.想象你站在镜子前,请问,为什么镜子中的影象可以颠倒左右,却不能颠倒上下
7.为什么在任何旅馆里,你打开热水,热水都会瞬间倾泻而出
8.你怎样将Excel的用法解释给你的奶奶听
9.你怎样重新改进和设计一个ATM银行自动取款机
10.如果你不得不重新学习一种新的计算机语言,你打算怎样着手来开始
11.如果你的生涯规划中打算在5年内受到奖励,那获取该项奖励的动机是什么观众是谁
12.如果微软告诉你,我们打算投资五百万美元来启动你的投资计划,你将开始什么样商业计划为什么
3.你有四个装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被污染的药丸的重量+1。只称量一次,如何判断哪个罐子的药被污染了
4.门外三个开关分别对应室内三盏灯,线路良好,在门外控制开关时候不能看到室内灯的情况,现在只允许进门一次,确定开关和灯的对应关系
5.人民币为什么只有1、2、5、10的面值
5.12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。13个呢(
注意此题并未说明那个球的重量是轻是重,所以需要仔细考虑)
6.在9个点上画10条直线,要求每条直线上至少有三个点
7.在一天的24小时之中,时钟的时针、分针和秒针完全重合在一起的时候有几次都分别是什么时间你怎样算出来的
第五题. 推理游戏

微软面试问题及答案

微软面试问题及答案

微软面试问题及答案微软的相关问题会是什么样的问题呢?而它们的答案又是什么?下面微软面试问题及答案是想跟大家分享的,欢送大家浏览。

1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。

现在有假设干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?2.你有一桶果冻,其中有黄色、绿色、红色三种,闭上眼睛抓取同种颜色的两个。

抓取多少个就可以确定你肯定有两个同一颜色的果冻?3.如果你有无穷多的水,一个3公升的提捅,一个5公升的提捅,两只提捅形状上下都不均匀,问你如何才能准确称出4公升的水?4.一个岔路口分别通向老实国和说谎国。

来了两个人,一个是老实国的,另一个是说谎国的。

老实国永远说实话,说谎国永远说谎话。

现在你要去说谎国,但不知道应该走哪条路,需要问这两个人。

请问应该怎么问?5.12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。

13个呢?(注意此题并未说明那个球的重量是轻是重,所以需要仔细考虑)6.在9个点上画10条直线,要求每条直线上至少有三个点?7.在一天的24小时之中,时钟的时针、分针和秒针完全重合在一起的时候有几次?都分别是什么时间?你怎样算出来的?8.怎么样种植4棵树木,使其中任意两棵树的间隔相等?1.为什么下水道的盖子是圆的?2.中国有多少辆汽车?3.将汽车钥匙插入车门,向哪个方向旋转就可以翻开车锁?4.如果你要去掉中国的34个省(含自治区、直辖市和港澳特区及台湾省)中的任何一个,你会去掉哪一个,为什么?5.多少个加油站才能满足中国的所有汽车?6.想象你站在镜子前,请问,为什么镜子中的影象可以颠倒左右,却不能颠倒上下?7.为什么在任何旅馆里,你翻开热水,热水都会瞬间倾泻而出?8.你怎样将Excel的用法解释给你的奶奶听?9.你怎样重新改良和设计一个ATM银行自动取款机?10.如果你不得不重新学习一种新的计算机语言,你打算怎样着手来开始?11.如果你的生涯规划中打算在5年内受到奖励,那获取该项奖励的动机是什么?观众是谁?12.如果微软告诉你,我们打算投资五百万美元来启动你的投资方案,你将开始什么样商业方案?为什么?13.如果你能够将全世界的电脑厂商集合在一个办公室里,然后告诉他们将被强迫做一件事,那件事将是什么?1.你让工人为你工作7天,回报是一根金条,这个金条平分成相连的7段,你必须在每天完毕的时候给他们一段金条。

微软(外包)面试题(一)

微软(外包)面试题(一)

微软(外包)⾯试题(⼀)
前段时间去微软(外包)参加了⾯试,觉得⼤公司就是不⼀样,重基础!⼈家为啥能做⼤,因为招⼈时,眼光放的远。

⼀些⾯试题,会分⼏次记录下来。

CLR⽅⾯:
1.什么是装箱、拆箱?
答:值类型和引⽤类型的转换。

装箱分3部:
1)分配内存空间。

包括要装箱的值类型的空间、⽅法表、SynBlockIndex,其中后两者⽤来管理引⽤对象。

2)值复制。

把堆栈中要装箱的值复制到堆上。

3)返回引⽤对象的引⽤。

拆箱也分3部:
1) 检查类型,确保引⽤类型是装箱的结果。

2)指针返回,返回要拆箱的引⽤类型中的值的地址。

3)字段拷贝,把引⽤类型中的字段拷贝到堆栈中。

2.垃圾收集机制?
答:CLR实现的⾃动内存管理。

需要清楚的⼏点:
1)什么被认为是可回收的对象?
GC采⽤⼀定的算法遍历所有的对象,找出可达对象和不可达对象,不可达对象是可回收的对象。

2)什么时候回收?
通常情况下:内存不⾜溢出时,确切的说,是第⼀代对象已满的时候。

3)如何回收?
垃圾收集进程来释放不可达对象的内存空间。

4)回收完后,还需要做什么?
避免托管堆上的内存碎⽚,重新分配内存,压缩托管堆。

5)避免垃圾回收带来的性能影响,采⽤代龄机制。

微软面试题总结版

微软面试题总结版

微软面试题总结版一.最基此题型(说明:此类题型比较简单)1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。

现在有假设干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?2.你有一桶果冻,其中有黄色、绿色、红色三种,闭上眼睛抓取同种颜色的两个。

抓取多少个就可以确定你肯定有两个同一颜色的果冻?(5秒-1分钟)3.如果你有无穷多的水,一个3公升的提捅,一个5公升的提捅,两只提捅形状上下都不均匀,问你如何才能准确称出4公升的水?(40秒-3分钟)4.一个岔路口分别通向老实国和说谎国。

来了两个人,一个是老实国的,另一个是说谎国的。

老实国永远说实话,说谎国永远说谎话。

现在你要去说谎国,但不知道应该走哪条路,需要问这两个人。

请问应该怎么问?(20秒-2分钟)5.12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。

13个呢?(注意此题并未说明那个球的重量是轻是重,所以需要仔细考虑)(5分钟-1小时)6.在9个点上画10条直线,要求每条直线上至少有三个点?(3分钟-20分钟)7.在一天的24小时之中,时钟的时针、分针和秒针完全重合在一起的时候有几次?都分别是什么时间?你怎样算出来的?二.没有答案型(说明:这些题显然不是考你智力。

而考的是你的反响能力。

这种题大多数没有答案,但是要看你的反响喽!)1.为什么下水道的盖子是圆的?2.中国有多少辆汽车?3.将汽车钥匙插入车门,向哪个方向旋转就可以翻开车锁?4.如果你要去掉中国的34个省(含自治区、直辖市和港澳特区及台湾省)中的任何一个,你会去掉哪一个,为什么?5.多少个加油站才能满足中国的所有汽车?6.想象你站在镜子前,请问,为什么镜子中的影象可以颠倒左右,却不能颠倒上下?7.为什么在任何旅馆里,你翻开热水,热水都会瞬间倾泻而出?8.你怎样将Excel的用法解释给你的奶奶听?9.你怎样重新改进和设计一个ATM银行自动取款机?10.如果你不得不重新学习一种新的计算机语言,你打算怎样着手来开始?11.如果你的生涯规划中打算在5年内受到奖励,那获取该项奖励的动机是什么?观众是谁?12.如果微软告诉你,我们打算投资五百万美元来启动你的投资方案,你将开始什么样商业方案?为什么?13.如果你能够将全世界的电脑厂商集合在一个办公室里,然后告诉他们将被强迫做一件事,那件事将是什么?三.难题(说明:这类题有一定难度,如果得不到答案,也不能说明什么。

微软面试智力题及答案

微软面试智力题及答案

微软面试智力题及答案1.烧一根不均匀的绳子,从头烧到尾总共需要1个小时,问如何用烧绳子的方法来确定半小时的时间呢?2.10个海盗抢到了100颗宝石,每一颗都一样大小且价值连城。

他们决定这么分:(1)抽签决定自己的号码(1~10);(2)首先,由1号提出分配方案,然后大家表决,当且仅当超过半数的人同意时,按照他的方案进行分配,否则将被扔进大海喂鲨鱼;(3)如果1号死后,再由2号提出分配方案,然后剩下的4个人进行表决,当且仅当超过半数的人同意时,按照他的方案进行分配,否则将被扔入大海喂鲨鱼;(4)依此类推……条件:每个海盗都是很聪明的人,都能很理智地做出判断,从而做出选择。

问题:第一个海盗提出怎样的分配方案才能使自己的收益最大化?3.为什么下水道的盖子是圆的?4.中国有多少辆汽车?5.你让工人为你工作7天,回报是一根金条,这根金条平分成相连的7段,你必须在每天结束的时候给他们一段金条。

如果只允许你两次把金条弄断,你如何给你的工人付费?6.有一辆火车以每小时15公里的速度离开北京直奔广州,同时另一辆火车以每小时20公里的速度从广州开往北京。

如果有一只鸟,以30公里每小时的速度和两辆火车同时启动,从北京出发,碰到另一辆车后就向相反的方向返回去飞,就这样依次在两辆火车之间来回地飞,直到两辆火车相遇。

请问,这只鸟共飞行了多长的距离?7.你有两个罐子以及50个红色弹球和50个蓝色弹球,随机选出一个罐子,随机选出一个弹球放入罐子,怎样给出红色弹球最大的选中机会?在你的计划里,得到红球的几率是多少?8.想像你站在镜子前,请问,为什么镜子中的影像可以左右颠倒,却不能上下颠倒呢?9.如果你有无穷多的水,一个3公升的提捅,一个5公升的提捅,两只提捅形状上下都不均匀,问你如何才能准确称出4公升的水?10.你有一桶果冻,其中有黄色、绿色、红色三种,闭上眼睛抓取同种颜色的两个。

抓取多少次就可以确定你肯定有两个同一颜色的果冻?11.连续整数之和为1000的共有几组?12.从同一地点出发的相同型号的飞机,可是每架飞机装满油只能绕地球飞半周,飞机之间可以加油,加完油的飞机必须回到起点。

微软的面试题及答案(超变态但很经典)

第⼀组题答案: 1)三根绳,第⼀根点燃两端,第⼆根点燃⼀端,第三根不点,第⼀根绳烧完(30分钟)后,点燃第⼆根绳的另⼀端,第⼆根绳烧完(45分钟)后,点燃第三根绳⼦两端,第三根绳烧完(1⼩时15分)后,计时完成 2)根据抽屉原理,4个 3)3升装满;3升-〉5升(全注⼊);3升装满;3升-〉5升(剩1升);5升倒掉;3升-〉5升(注⼊1升);3升装满;3升-〉5升;完成(另:可⽤回溯法编程求解) 4)问其中⼀⼈:另外⼀个⼈会说哪⼀条路是通往诚实国的?回答者所指的那条路必然是通往说谎国的。

5)12个球: 第⼀次:4,4 如果平了:那么剩下的球中取3放左边,取3个好球放右边,称:如果左边重,那么取两个球称⼀下,哪个重哪个是次品,平的话第三个重,是次品,轻的话同理,如果平了,那么剩下⼀个次品,还可根据需要称出次品⽐正品轻或者重,如果不平:那么不妨设左边重右边轻,为了便于说明,将左边4颗称为重球,右边4颗称为轻球,剩下4颗称为好球,取重球2颗,轻球2颗放在左侧,右侧放3颗好球和⼀颗轻球,如果左边重,称那两颗重球,重的⼀个次品,平的话右边轻球次品。

如果右边重,称左边两颗轻球,轻的⼀个次品。

如果平,称剩下两颗重球,重的⼀个次品,平的话剩下那颗轻球次品 13个球: 第⼀次:4,4,如果平了。

剩5颗球⽤上⾯的⽅法仍旧能找出次品,只是不能知道次品是重是轻。

如果不平,同上 6) o o o o o o o o o 7) 23次,因为分针要转24圈,时针才能转1圈,⽽分针和时针重合两次之间的间隔显然>1⼩时,它们有23次重合机会,每次重合中秒针有⼀次重合机会,所以是23次 重合时间可以对照⼿表求出,也可列⽅程求出 8) 在地球表⾯种树,做⼀个地球内接的正四⾯体,内接点即为所求 第⼆组⽆标准答案 第三组 1. 分成1,2,4三段,第⼀天给1,第⼆天给2取回1,第3天给1,第4天给4取回1、2,第5天给1,第6天给2取回1,第七天给1 2. 求出⽕车相遇时间,鸟速乘以时间就是鸟飞⾏的距离 3. 四个罐⼦中分别取1,2,3,4颗药丸,称出⽐正常重多少,即可判断出那个罐⼦的药被污染 4. 三个开关分别:关,开,开10分钟,然后进屋,暗且凉的为开关1控制的灯,亮的为开关2控制的灯,暗且热的为开关3控制的灯 5. 因为可以⽤1,2,5,10组合成任何需要的货币值,⽇常习惯为10进制 6. 题意不理解...*_* 7. 012345 0126(9)78 第四组都是很难的题⽬ 第⼀题:97 0 1 2 0 或者 97 0 1 0 2 (提⽰:可⽤逆推法求出) 第⼆题:3架飞机5架次,飞法: ABC 3架同时起飞,1/8处,C给AB加满油,C返航,1/4处,B给A加满油,B返航,A到达1/2处,C从机场往另⼀⽅向起飞,3/4处,C同已经空油箱的A平质S嘤⼟浚 盉从机场起飞,AC到7/8处同B平分剩余油量,刚好3架飞机同时返航。

微软面试题总结版

2.信件如下:
"xxx领导:您好!我馆近期将展出一批珍贵文物,让更多的人能够真正的体会到中华民族文明的悠久、灿烂。我们希望能将您所拥有的明代的城砖展出。并且我们将在博物馆内设置专栏,宣传您对中华民族悠久文化的保存所作出的巨大贡献,让更多的华夏子孙看到,并且亲身体验到华夏文明的悠久历史,从而加强中华民族的凝聚力!"
五.主观题(说明:在以后的工作过程中,我们可定会犯这样那样的错误。既然错误已经酿成,损失在所难免,我们只能想办法把损失减少到最小。如果能巧妙地回答出这些问题,再发生错误的情况下。能让客户有最少的抱怨,公司有最少的损失。)
1.某手机厂家由于设计失误,有可能造成电池寿命比原来设计的寿命短一半(不是冲放电时间),解决方案就是免费更换电池或给50元购买该厂家新手机的折换券。请给所有已购买的用户写信告诉解决方案。
条件:每个海盗都是很聪明的人,都能很理智地做出判断,从而做出选择。
问题:第一个海盗提出怎样的分配方案才能使自己的收益最大?
2 . 一道关于飞机加油的问题,已知:
每个飞机只有一个油箱, 飞机之间可以相互加油(注意是相互,没有加油机) 一箱油可供一架飞机绕地球飞半圈,
问题:
为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机?(所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中间没有飞机场)
说明:
1、飞机1、飞机2等飞机n为飞机的个数
2、把整个圆(飞行轨道)周等分为8份,分别定为O点(起飞点),依次为A、B、C、D、E、F、G
设想一下,按题目要求一架飞机要想不加油安全的飞并且安全返回,能飞行最远距离是一个圆周的1/4,既飞行度距离是OB;如果给另外一架飞机加油的话它只能飞行1/8的距离OA。这些前提的存在,再根据题意就可推出如下的飞行放案:

微软公司的面试问题

微软公司的面试问题(总5页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--微软公司的面试问题这是一篇由网络搜集整理的关于微软公司的面试问题的文档,希望对你能有帮助。

★如果你需要学习一门新的计算机语言,你会怎样做?★假设由你负责设计比尔·盖茨的卫生间。

当然,钱不成问题,但是你不可以和比尔谈。

你会怎样做?★到目前为止,你遇到的最难回答的问题是什么?★如果微软公司说,我们愿意投资500万美元用来开发你提出的方案。

那么你会做什么为什么★如果你将世界上所有的计算机制造商召集起来,告诉他们必须要做一件事,你会让他们做什么事?★如果你在五年内会得到一笔奖金,你认为会是因为什么关注你的成绩的人会是谁★你如何教自己的奶奶使用微软Excel表格系统?★为什么当我们在任何一家宾馆打开热水龙头时,热水会马上流出来?★你为什么想在微软工作?★假设你回到家,进入自己的房间,打开电灯开关,可是一点反应都没有——灯没有亮。

这时,你在判断问题出在哪里时,会依次采取怎样的做法?★如果你有一个许多部件可以拆卸的时钟,你将它一块块拆开,但是没有记住是怎样拆的。

然后你将各个零件重新组装起来,最后发现有三个重要零件没有放进去。

这时你如何重新组装这个时钟?★如果你需要学习一门新的计算机语言,你会怎样做?★假设由你负责设计比尔·盖茨的卫生间。

当然,钱不成问题,但是你不可以和比尔谈。

你会怎样做?★到目前为止,你遇到的最难回答的问题是什么?★如果微软公司说,我们愿意投资500万美元用来开发你提出的方案。

那么你会做什么为什么★如果你将世界上所有的计算机制造商召集起来,告诉他们必须要做一件事,你会让他们做什么事?★如果你在五年内会得到一笔奖金,你认为会是因为什么关注你的成绩的人会是谁★你如何教自己的奶奶使用微软Excel表格系统?★为什么当我们在任何一家宾馆打开热水龙头时,热水会马上流出来?★你为什么想在微软工作?★假设你回到家,进入自己的房间,打开电灯开关,可是一点反应都没有——灯没有亮。

微软面试100题及答案

微软面试100题及答案【篇一:微软技术面试100题答案1】p class=txt>1.把二元查找树转变成排序的双向链表(树)题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。

要求不能创建任何新的结点,只调整指针的指向。

10/ /6 14/ / / /4 8 12 16转换成双向链表4=6=8=10=12=14=16。

首先我们定义的二元查找树节点的数据结构如下:struct bstreenode{int m_nvalue; // value of nodebstreenode *m_pleft; // left child of nodebstreenode *m_pright; // right child of node};sorehead:第一题:基本就是采用一次遍历即可,楼主采用的是递归方法。

但有两个建议:1、函数里面最好不好使用全局变量,采用参数传递的方式可能更好。

全局变量能少用就少用。

2、if (null == pcurrent)这种方式我也不是很推荐。

我知道采用这种方式的好处是一旦少写了一个等号,编译器会报错,null不是一个合法左值。

其实我最开始写代码时也是这么写的,很长时间都觉得挺好。

但这有个悖论,就是一个开发者能够想起来这么写的时候,这说明他知道这么是要做等值判断,自然也会知道该写==而不是=,想不起来的时候自然也就该犯错误还是犯错误,并不能起到原本初衷。

代码写多了,会发现这么写真有点多此一举。

july关于第一题,我再多说点:我们可以中序遍历整棵树。

按照这个方式遍历树,比较小的结点先访问。

如果我们每访问一个结点,假设之前访问过的结点已经调整成一个排序双向链表,我们再把调整当前结点的指针将其链接到链表的末尾。

当所有结点都访问过之后,整棵树也就转换成一个排序双向链表了。

view plaincopy to clipboard? // 遍历二元查找树中序??????????????????????????????????????????????????? { if (null == pcurrent) {return; } if (null != pcurrent-m_pleft) { ergodicbstree(pcurrent-m_pleft); } // 节点接到链表尾部converttodoublelist(pcurrent); // 右子树为空 if (null != pcurrent-m_pright) { ergodicbstree(pcurrent-m_pright); }}// 二叉树转换成listvoid converttodoublelist(bstreenode * pcurrent){ pcurrent-m_pleft = plistindex; if (null != plistindex) { plistindex-m_pright = pcurrent; } else??????????phead = pcurrent; } plistindex = pcurrent; coutpcurrent-m_nvalueendl;}或者网友何海涛所述:view plaincopy to clipboard???????????????????????????????????????? void convertnode(bstreenode* pnode, bstreenode* plastnodeinlist){if(pnode == null)return; bstreenode *pcurrent = pnode; // convert the left sub-tree if (pcurrent-m_pleft != null) convertnode(pcurrent-m_pleft, plastnodeinlist); // put the current node into the double-linked list pcurrent-m_pleft = plastnodeinlist; if(plastnodeinlist != null)plastnodeinlist-m_pright = pcurrent;plastnodeinlist = pcurrent; // convert the right sub-treeif (pcurrent-m_pright !=null)convertnode(pcurrent-m_pright, plastnodeinlist);}?????????????????????? bstreenode* convert_solution1(bstreenode* pheadoftree){bstreenode *plastnodeinlist =null;convertnode(pheadoftree, plastnodeinlist); // get the head of the double-linked listbstreenode *pheadoflist = plastnodeinlist;while(pheadoflist pheadoflist-m_pleft)pheadoflist = pheadoflist-m_pleft;return pheadoflist;}但显然,以下这种思路更容易理解些:view plaincopy to clipboard ???????????????????????????????? bstreenode* convertnode(bstreenode* pnode, bool asright){if(!pnode)return null;bstreenode *pleft =null;bstreenode *pright = null;// convert the left sub-treeif(pnode-m_pleft)pleft = convertnode(pnode-m_pleft, false);// connect the greatest node in the left sub-tree to the current nodeif(pleft){pleft-m_pright = pnode;?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?????? }// convert the right sub-treeif(pnode-m_pright)pright = convertnode(pnode-m_pright, true);// connect the least node in the right sub-tree to the current nodeif(pright){pnode-m_pright = pright;pright-m_pleft = pnode;}bstreenode *ptemp = pnode;//if the current node is the right child of its parent, // return the least node in the tree whose root is the currentnodeif(asright){while(ptemp-m_pleft)ptemp = ptemp-m_pleft;}// if the current node is the left child of its parent, // return the greatest node in the tree whose root is the currentnodeelse{while(ptemp-m_pright)ptemp = ptemp-m_pright;}【篇二:微软面试100题】ss=txt>题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档