从不平衡二叉树中随机选择一个节点

2024-03-12

我的一位朋友遇到了以下面试问题,我们都不太确定正确答案是什么。有谁知道如何解决这个问题?

给定一个不平衡二叉树,描述一种随机选择节点的算法,使得每个节点被选择的概率相等。


您只需遍历树一次即可完成此操作。该算法与列表相同。

当您看到树中的第一个项目时,您将其设置为选定的项目。

当您看到第二个项目时,您在 (0,2] 范围内选择一个随机数。如果它是 1,则新项目将成为所选项目。否则您将跳过该项目。

对于您看到的每个节点,您增加计数,并以 1/计数的概率选择它。因此,在第 101 个节点,您在 (0,101] 范围内选择一个随机数。如果它是 100,则该节点是新选定的节点。

遍历完树后,返回选定的节点。该操作的时间复杂度为 O(n),其中 n 是树中的节点数,空间复杂度为 O(1)。无需预处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从不平衡二叉树中随机选择一个节点 的相关文章

  • Clojure:只能从尾部位置重复

    我正在尝试递归地反转列表 但是我得到了Can only recur from tail position运行时 这到底意味着什么 如何改进我的代码才能使其正常工作 defn recursive reverse coll loop coll
  • 线程“main”中的异常 java.lang.StackOverflowError

    我有一段代码 但我无法弄清楚为什么它在线程 main java lang StackOverflowError 中给出异常 这是问题 Given a positive integer n prints out the sum of the
  • 归并排序中的递归:两次递归调用

    private void mergesort int low int high line 1 if low lt high line 2 int middle low high 2 line 3 mergesort low middle l
  • 高效列出目录中的所有子目录

    请参阅迄今为止所采取的建议的编辑 我正在尝试使用 WinAPI 和 C 列出给定目录中的所有目录 文件夹 现在我的算法又慢又低效 使用 FindFirstFileEx 打开我正在搜索的文件夹 然后我查看目录中的每个文件 使用 FindNex
  • 如何计算排列? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个关于 Java 排列的问题 Suppose I have five different elements in an arra
  • 合并xml文档

    我遇到的所有关于合并 XML 文档的解决方案都无法实现我的愿望 让我解释 XML 文档 1 a b title Original Section b title Original Child Section b b title Origin
  • Java 递归和性能

    递归对处理器和内存的影响是否很大 我的意思是 我的一个线程有一个方法 很可能会调用自身 假设它每秒可以自调用一次 我的应用程序应该运行至少 24 小时而不停止 因此它提供了 60 60 24 86400 个自调用方法 它对第二个 主 线程有
  • 如何使用 python 有效地找到两个大文件的交集?

    我有两个大文件 它们的内容如下所示 134430513125296589151963957125296589 该文件包含未排序的 id 列表 某些 id 可能会在单个文件中出现多次 现在我想找到路口两个文件的一部分 这就是两个文件中都出现的
  • 并行化斐波那契序列生成器

    我正在学习并行化 在一项练习中 我得到了一些我应该提高性能的算法 其中之一是斐波那契数列生成器 array 0 0 array 1 1 for q 2 q lt MAX q array q array q 1 array q 2 我怀疑 这
  • 欧拉项目 45

    我还不是一名熟练的程序员 但我认为这是一个有趣的问题 我想我应该尝试一下 三角形 五边形 六边形 数字由以下生成 公式 三角形 T n n n 1 2 1 3 6 10 15 五边形 P n n 3n 1 2 1 5 12 22 35 六角
  • 使用 A 星查找路径的启发式函数

    I am trying to find a optimal solution for the following problem 每个节点内表示的数字表示为 x y 一个节点的相邻节点总是有一个y值为 当前节点 y 值 1 更改的成本为 1
  • 在矩阵/位图中查找质量簇

    这是此处发布的问题的延续 在 2D 位图上查找质心 https stackoverflow com questions 408358 finding the center of mass on a 2d bitmap正如给出的例子 它讨论了
  • 贪心技术与穷举搜索有何不同?

    我正在为一些示例问题编写伪代码 并且我注意到贪婪技术和详尽搜索之间存在令人担忧的模式 Job 1 Job 2 Job 3 Job 4 Job 5 Person 1 9 2 7 8 Person 2 6 4 3 7 Person 3 5 8
  • 优化重叠矩形的绘制

    我有很多矩形 有些与其他矩形重叠 每个矩形都有一个绝对 z 顺序和一个colour 每个 矩形 实际上是粒子效果 网格或纹理的轴对齐边界框 并且可能是半透明的 但只要您不尝试剔除其他矩形后面的矩形 就更容易抽象地思考彩色矩形 所以我将在问题
  • 如何高效生成总和在指定范围内的所有组合(在所有深度)

    假设您有一组值 1 1 1 12 12 16 如何生成总和在预定义范围内的所有可能组合 不重复 min max 例如 这里是 所有深度的 范围在13 and 17 1 12 1 1 12 1 1 1 12 16 1 16 这假设具有相同值的
  • 用于计算有向图上非循环路径数量的快速算法

    简而言之 我需要一个fast计算简单有向图中有多少条非循环路径的算法 By simple我的意思是没有自环或多重边的图 Apath可以从任何节点开始 并且必须在没有传出边的节点上结束 一条路径是acyclic如果没有边出现两次 我的图 经验
  • 优化两个三位数乘积的最大回文数?

    我正在研究一个面试问题 我被问到这个问题 我应该编写一个程序 从两个三位数的乘积中找到最大的回文数 这里是question https projecteuler net problem 4 我想出了这种从底部开始的蛮力方法 public c
  • 2D形状识别与解析算法

    我正在寻找一种算法 用于从给定的一组 x y 点检测简单形状 如矩形 三角形 正方形和圆形 我还在寻找一种方法 一旦检测到 将路径转换为更干净的形状 我已经查遍了互联网 但没有找到任何 简单 的方法 几乎所有这些对于我的简单实现来说都是高级
  • 查找一个二维矩阵是否是另一个二维矩阵的子集

    最近我参加了一个黑客马拉松 我了解到一个问题 试图在 2d 矩阵中找到网格形式的模式 模式可以是 U H 和 T 并由 3 3 矩阵表示 假设我想展示 H 和 U 1 0 1 1 0 1 1 1 1 gt H 1 0 1 gt U 1 0
  • 将数字的各个数字部分相加/求和的最快方法

    不久前 我在数学论坛上看到一个问题 其中一个人正在讨论一遍又一遍地将数字中的数字相加 直到达到个位数 即 362 将变成 3 6 2 这将变成 11 然后 11 将变成 1 1 将变成 2 因此 362 将返回2 我写了一些很好的代码来得到

随机推荐

  • 如何从子查询结果中选择值

    我有下面提到的 4 个表并尝试提取值ACC NUMBER来自子查询 请帮助我优化正确的语法 ACCOUNT TABLE ACC NUMBER ACC NAME ACCOUNT DETAILS TABLE ACC NUMBER DEAL NU
  • Android Studio 2.0 更新 - public static volatile com.android.tools.fd.runtime.IncrementalChange

    在我使用 Android 2 0 更新后 一个新字段已添加到我的模型对象中 public static volatile com android tools fd runtime IncrementalChange com pr4 mode
  • 方案作业

    当我每次得到值 10 时评估以下表达式 lambda x lambda set x x 10 x 0 不过 我只是通过用名称抽象上述过程来进行修改 并在每次值增加 10 时调用 foo define foo lambda x lambda
  • 在 ES6 + babel 中使用 bluebird Promisify 导入类(构造函数)

    假设我创建或拥有一个 node js 库lib js export class C constructor value callback callback false Hello value task value callback call
  • 我可以尝试通过特定适配器 ping 某个网站吗?

    我希望这不是一个太基本的问题 标题有点问了一切 pingWindows 中也有一个选项 S srcaddr Source address to use 所以你可以做类似的事情 ping 10 10 10 1 l 0 S 192 168 1
  • 永久监控代码放在哪里?

    我正在尝试设置永久监视器 我将其添加到我的 app js 中 var forever require forever monitor var child new forever Monitor app js max 3 silent tru
  • 将行旋转为列

    我有一个 SQL 查询 它生成以下内容 col1 col2 col3 item1 key1 value1 item1 key2 value2 这是查询 SELECT t1 col1 t2 col2 t2 col3 FROM table1 t
  • 从窗口服务显示窗口窗体

    我正在创建一个窗口服务 我的要求是按特定时间间隔显示 Windows NT 服务的窗口窗体 出于测试目的 我只想在服务启动时显示表单 protected override void OnStart string args eventLog1
  • 如果图像是背景,TabControl 会闪烁

    我注意到 如果我在具有图像背景的面板中有一个 TabControl 当鼠标悬停在选项卡上时 它会闪烁并重绘 有没有解决方法可以防止这种情况发生 我看到了 发生这种情况是因为 TabControl 通过要求父控件在其自己的窗口内绘制自身来部分
  • Swift - 如果小数等于 0,如何从浮点数中删除小数?

    我显示的距离为一位小数 如果它等于 0 例如 1200 0Km 我想删除该小数 我该如何快速做到这一点 我这样显示这个数字 let distanceFloat Float currentUser distance as NSString f
  • Google Chrome 的 Javascript 控制台键盘快捷键

    我想使用调试我的 javascript 应用程序谷歌浏览器3的开发者工具 一切都很好 直到我真正想开始调试 我可以设置断点等 但我不想使用鼠标而是使用键盘进行调试 In Firefox Firebug I can use F10 F11 a
  • HttpClient.GetAsync 在具有锁屏访问以及 TimeTrigger 或 MaintenanceTrigger 的后台任务中失败

    在 Windows 8 Metro 应用程序的后台任务中运行时 Client GetAsync 对我来说似乎失败 我尝试同时使用 TimeTrigger 和 MaintenanceTrigger 看来也不例外 调试它时 它只是在该行退出 如
  • 具有多个选项的警报

    只是想知道 是否可以创建具有多个选项的警报 例如 在 Facebook 中 当您在未完成输入消息的情况下尝试关闭选项卡 窗口时 会弹出一条带有 离开此页面 和 留在此页面 选项的警报 以表单为例 您正在寻找 window onbeforeu
  • 在机器人框架中连接两个字符串的最简单方法。?

    给定两个字符串 a b 连接它们并分配给机器人框架中的新变量的最简单方法是什么 我尝试了这种简单的Pythonic方式 但它不起作用 var a b 您可以使用Catenate http robotframework org robotfr
  • 适用于 iPhone 的 Google Talk API

    有谁知道如何使用 GData API 连接到 Google Talk 是否有更好的 iphone 开发 API 用于连接 Google Talk 我一直在查看为 API 下载的示例 但没有看到任何支持 This http code goog
  • 用于演示的 R 演示 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 计算 3D 平面的 Voronoi 图

    是否有代码 库可以计算 3D 平面 平行四边形 的 Voronoi 图 我检查了 Qhull 它似乎只能处理点 在它的示例中 Voro 可以处理不同大小的球体 但我找不到任何多边形 在这张图片中 3d 中的样本平面 https i stac
  • Ruby 无法解析 CSV 文件:CSV::MalformedCSVError(第 1 行中的非法引用。)

    Ubuntu 12 04 LTS Ruby ruby 1 9 3dev 2011 09 23 修订版 33323 i686 linux 轨道 3 2 9 以下是我收到的 CSV 文件的内容 date time settlement id t
  • oAuth 和 Codeigniter 与 MongoDB

    我正在使用 Alex Bilbie 制作的 Codeigniter 的 oAuth 库 它是为 MySQL 设计的 有人用过 MongoDB 吗 我将尝试将其 转换 为 MongoDB 但存储库中有很多文件 服务器设置只需要其中很少的文件
  • 从不平衡二叉树中随机选择一个节点

    我的一位朋友遇到了以下面试问题 我们都不太确定正确答案是什么 有谁知道如何解决这个问题 给定一个不平衡二叉树 描述一种随机选择节点的算法 使得每个节点被选择的概率相等 您只需遍历树一次即可完成此操作 该算法与列表相同 当您看到树中的第一个项