查找并返回大于平衡树q的下一个最小值

时间:2016-11-06 23:42:15

标签: c++ binary-search-tree

我试图找到大于参数q的下一个最小元素。我接近跟踪q,直到找到的密钥大于q,并返回它。但是,如果该键等于q,我将不得不返回,直到找到我最初离开的前一个节点。我尝试了很多方法,但仍然无法弄清楚我应该在哪里创建指针来跟踪该节点,这样我的代码就会向右移动一次然后一直向左找到密钥。有什么建议吗?

  int find_next_larger(tree_node_t *tree, int q)
{
    tree_node_t * tmp_node;
    tree_node_t * took_left_node = NULL;
    if (tree->left == NULL)
        return(NULL); // empty tree returns null
    else
    {
        tmp_node = tree; 

        while (tmp_node-> right != NULL)
        {
            if (q < tmp_node->key)
            {
                tmp_node = tmp_node->left;  // if q is smaller than node go to left 
            }
            else
            {
                tmp_node = tmp_node->right; //otherwise go right
            }       
        }
        if (tmp_node->key > q)
            return tmp_node->left;
        else
        {
            //got stuck here
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我们称这个算法为上限

算法如下:

递归

  • 如果树为空,请返回positive infinity
  • 如果q小于当前树的根,则返回min(root, UpperBounded(left subtree))
  • 否则返回UpperBounded(right subtree)

非递归

  • let upper = positive_infinity
  • 让curr = root
  • 虽然curr!= NULL
    • 如果q&lt; CURR
      • upper = min(upper,curr)
      • curr = curr-&gt; left
    • 否则
      • curr = curr-&gt; right
  • return upper

我对此进行了最低限度的测试,但如果您发现任何错误,可以在此处报告