首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >二叉树查找比键更近和更大的数字

二叉树查找比键更近和更大的数字
EN

Stack Overflow用户
提问于 2017-03-17 13:40:46
回答 1查看 490关注 0票数 1

假设我有一棵平衡的二叉树。我想在树上找一把钥匙。然而,如果在二叉树中不存在k,它应该给出离k最近的下一个最大数。

例如,假设在树中有这些数字1,5,6,8,10作为键。如果我搜索'7‘,它应该返回8,如果我搜索2,它应该返回5等等。

要执行这样的搜索,必须对二叉树进行哪些修改?我也想要一个O(log )的解。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-17 14:00:09

假设您指的是“二进制搜索树”而不是“二叉树”,则不需要进行任何修改就可以在树中找到最小元素y,从而使y >= x。

代码语言:javascript
运行
复制
search(n, x, best_so_far) ::=
    if n == nil { return best_so_far }
    if n.value == x { return x }
    if n.value > x { return search(n.left, x, min(best_so_far, n.value) }
    if n.value < x { return search(n.right, x, best_so_far) }

您可以将此函数称为search(root, x, +infinity)

这样做的想法是,如果您在节点n处探索左分支,则不需要考虑n右侧的任何东西: n.value大于x,右边的所有东西都大于n.value。类似地,如果您正在探索节点n的右分支,那么您可以丢弃n左边的所有东西: n.value小于x,而n左边的所有东西都小于n.value。

代码运行时以树的高度为界,如果树是平衡的,O(log )也是如此。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42859080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档