首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
一棵排序二叉树,令 f=(最大值 最小值)2, 设计一个算
[问答题]
一棵排序二叉树,令 f=(最大值+最小值)/2, 设计一个算法,找出距离f值最近、大于f值的结点。 复杂度如果是O(n
2
)则不得分。
添加笔记
求解答(1)
邀请回答
收藏(7)
分享
纠错
2个回答
添加回答
1
李程鹏
1:先找到值最小的节点,用O(h)的复杂度,h是值最小节点的高度 2:从最小的节点开始,依次找到当前节点的successor,然后把successor设置为当前节点,一直到当前节点大于f时,停止寻找 3:因为这个算法最多遍历边2次,变的数量比节点的数量小1,所以复杂度是O(n)
发表于 2018-01-27 17:03:59
回复(0)
0
北方有佳人zz
1. 遍历根的右子树,一直右到底即可找到最大值(or 最小值),时间复杂度O(logn)。
2. 遍历根的左子树,一直左到底即可找到最小值(or 最大值)
,时间复杂度O(logn)。
3. 通过计算得出 f,从根节点开始执行二分查找的过程,找到第一个大于当前节点的值的节点,记录下这个节点以及这个节点与 f 的差,循环判断当前节点是否有左子树(右子树肯定比当前节点还大,离 f 就更远了),判断左子树节点的值如果大于 f 并且与 f 的差值小于当前的这个差值,就记录下这个节点,直到左子树为空,返回保存的大于 f,并且与 f 的差值最小的那个节点,时间复杂度O(logn)。
总结:总体时间复杂度O(logn)。
编辑于 2018-03-23 17:19:48
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
微软
树
上传者:
iChanger
难度:
2条回答
7收藏
9821浏览
热门推荐
相关试题
编写实现链表排序的一种算法。说明为...
微软
链表
排序
评论
(2)
假定一个待哈希存储的线性表为(32...
哈希
评论
(1)
5.下列判断正确的是( )
资料分析
言语理解与表达
资料分析
评论
(1)
《拳皇97》最后BOSS是谁?
游戏常识
评论
(1)
《魔兽世界》中,下列不属于玩家可以...
游戏常识
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题