c++ - 我可以更好地找到给定值在二叉搜索树中的位置吗?

标签 c++ data-structures binary-search-tree

我需要一些帮助,了解如何在二叉搜索树中找到给定值的(排序的)位置,比我已经做的更好(如果可能的话)。

我有另一种方法可以搜索树的第 i 个元素并返回节点。所以基本上我通过搜索树解决了这个问题,直到我找到给定的值或者节点的数据大于我正在搜索的值。

我们的老师给了我们如何通过知道子树中有多少个元素来找到第 i 个元素的算法。这就是为什么我想知道我的问题是否可以用更少的步骤完成?

提前致谢!

这是不太理想的解决方案:

template <class T>
int BST<T>::Rang(const T& x) {

int meret = root->size;     //meret = size of the whole 
                            //tree
Node<T>* temp = i_th_Node_rec(1, root);
int i = 1;
while (temp && i <= meret && x != temp->data && x < temp->data) {
    ++i;
    temp = i_th_Node_rec(i, root);
}

return (i < meret) ? i : -1;
}

最佳答案

这与您定位第 i:th 节点的方式非常相似,但“相反”。

  • 如果元素在根中,它的位置就是左子树的大小。
  • 如果元素在左边,则它的位置与它在该子树中的位置相同。
  • 如果元素在右边,则它的位置是它在该子树中的位置加上根的左子树的大小再加一。

关于c++ - 我可以更好地找到给定值在二叉搜索树中的位置吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56396816/

相关文章:

c++ - 指针指针的自动内存管理

c++ - C++ 中的 Getline 函数将第一个输入作为空字符。它应该这样做吗?

c# - 双败赛数据结构

javascript - 在二叉搜索树上查找最小高度 - 如何跟踪高度的倒数第二个更新

c++ - 我如何使用一个非常量值来实例化一个类的多个对象?

c++ - 单个语句中的多个复合赋值 : is it Undefined Behavior or not?

c++ - C++ 中用于插入和删除的最佳数据结构/容器

c - 将指针元素添加到链表中

c - 使用C在排序数组中大于给定数字的最小数字的数组索引

c - 如何在C编程中删除以下结构体中具有成员函数的结构体?