二叉搜索树中的下一个最小值

问题描述

长话短说,给定节点 p,我想在平衡二叉树中找到下一个最小值(在 p 之后)。

  1. 所以给定节点 p,如果它有一个左孩子,那么下一个最小的将是其左孩子的最右边(从左孩子向右遍历,直到它不再存在)。
    • 如果左孩子没有右孩子,那么左孩子是最小的。
  2. 如果 p 没有左孩子,我们将从 p 向上遍历树,直到找到一个节点是父节点的右孩子,然后该父节点将是下一个最小的节点。
    • 如果我们一路向上,没有发现父节点的右孩子节点,那么就没有更小的值。

我想就是这样。我错过了什么吗?我认为这个的运行时间大约是 log(N)。如果我想在二叉搜索树中找到T个最大值,应该是Tlog(N)。

对于那些感兴趣的人,这是问题的较长版本。我有一个随着每次迭代而变化的数字数组。每次迭代它都会失去一个数字并获得一个数字。您可以考虑用另一个数字替换一个数字。我知道这将是哪两个数字。我需要在每次迭代中找到数组中 T 个最大数的总和。所以我的策略是使用二叉搜索树(红黑)进行更快的插入,然后查找 + 删除,最后找到 T 最大(我一直遍历到最大并调用 findNextSmallest T - 1 次)。整个事情应该是 (2 + T)log(N)

  1. 我寻找下一个最小的方法是否正确?
  2. 有没有比我现有的方法更好的方法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)