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

时间:2019-05-31 14:19:03

标签: 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;
}

1 个答案:

答案 0 :(得分:2)

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

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