我需要一些有关如何更好地找到二叉搜索树中给定值(排序)位置的帮助(如果可能的话)。
我还有另一种搜索树的第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;
}
答案 0 :(得分:2)
这与您定位第i个节点的方式非常相似,但是“反向”。