如何找到BST的某个元素,给定关键?

时间:2015-07-01 18:44:25

标签: c++ binary-search-tree

所以我试图为BST实现一个TREE_SUCCESSOR(X)函数,其中X是我试图找到其继承者的节点的关键。到目前为止,我有这个:

int BinarySearchTree::TREE_SUCCESSOR(node* x)
{
//i dont need a new node, I just need a pointer/reference to x. 
node* y = NULL;
//node* parent = NULL;
if (x->right != NULL)
{
    return FIND_MIN(x->right);
}
else
{
    y = x->parent; 
    while (y != NULL && x == y->right)
    {
        x = y;
        y = y->parent;
    }
    return y->key; 
}
} 

我的问题在于主要功能:

int main()
{
BinarySearchTree bst;
int num = 0; 
cout << "Enter number you want to find the successor of: " <<endl; 
cin >> num; 

if(BST.root->key == num)             //if i'm trying to find the successor of the root
   { TREE_SUCCESSOR(BST.root); } 
else
{ 
    while(BST.root->key != num)      //if the user input does not equal the root key value 
    { 
        ???? 
    }
} 

我想了解如何将BST遍历到BST的节点,直到key = num。例如,如果树具有节点3,4,5然后TREE_SUCCESSOR(4),则应返回5。我该怎么办?

编辑

所以我决定使用TREE_SEARCH(key)找到具有某个键的节点并返回它...然后将该节点传递给TREE_SUCCESSOR(X)

2 个答案:

答案 0 :(得分:1)

按顺序执行traversal

找到元素后继续遍历,下一个元素就是你需要的元素。

如果您正在寻找根的后继者,则不需要任何特殊情况,但您需要处理元素是遍历中的最后一个的情况,即最大的一个。

答案 1 :(得分:1)

我的第一种方法是在互联网上搜索示例"binary search tree successor"

但如果我有足够大的自我,我可能想要开发自己的算法。我会绘制一个二叉搜索树。接下来,我会选择一个节点,找出前往后继的步骤。完成这些步骤后,我将使用树上的不同节点完成这些步骤,并根据需要调整算法(步骤)。

获得算法后,我会对其进行编码。

但你不是我,所以你想在互联网上搜索“c ++二元搜索树后继函数”。