【问题标题】:How to find the immediate larger element in a BST given a specific node? [duplicate]如何在给定特定节点的 BST 中找到直接较大的元素? [复制]
【发布时间】:2019-10-30 21:59:42
【问题描述】:

我正在使用 BST。给定一个特定节点,如何在树中找到直接较大的元素?

【问题讨论】:

  • 您的问题是特定于 c++ 代码的吗? (因为你标记了它)。在这种情况下,请提供最少的代码、您的确切问题以及您尝试过的内容。如果您的问题更笼统,答案在于了解 BST 是什么。

标签: c++ binary-search-tree


【解决方案1】:

所以基本上你想要给定节点的中序继任者:下面是解决方案:

struct node * inOrderSuccessor(struct node *root, struct node *n) 
{ 

    if( n->right != NULL ) 
        return minValue(n->right); 

    struct node *succ = NULL; 

    // Start from root and search for successor down the tree 
    while (root != NULL) 
    { 
        if (n->data < root->data) 
        { 
            succ = root; 
            root = root->left; 
        } 
        else if (n->data > root->data) 
            root = root->right; 
        else
           break; 
    } 

    return succ; 
} 

算法的逻辑是(不需要父节点指针):

1) 如果节点的右子树不为NULL,则succ在右子树中。做以下。 转到右子树,返回右子树中键值最小的节点。

2) 如果节点的右子树为NULL,则从根开始并使用类似搜索的技术。做以下。 沿着树向下移动,如果一个节点的数据大于根的数据,则向右走,否则向左走。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-02
    • 2015-09-19
    • 2021-01-01
    • 2017-12-02
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 2016-06-13
    相关资源
    最近更新 更多