c++ - 如何在给定特定节点的 BST 中找到直接较大的元素?

标签 c++ binary-search-tree

<分区>

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

最佳答案

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

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,则从根开始,使用类搜索技术。做以下。 沿着树向下移动,如果一个节点的数据大于根的数据,则向右走,否则向左走。

关于c++ - 如何在给定特定节点的 BST 中找到直接较大的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58634222/

相关文章:

c++ - 将多线程类重构为单线程+和多线程

c++ - 在带有 extern "C"的 C++ 中使用 C 代码时出现问题

algorithm - 如何找到 AVL 树中节点的等级?

在 C99 中创建二叉搜索树

java - BST 数据结构 -- 类项目 -- 访问嵌套类

algorithm - 我试图在时间 O(1) 的二叉搜索树中找到一个键的后继

c++ - 如何以这种方式使用变量 C++

c++ - 避免标准容器中元素的默认构造

c - 插入操作中段错误错误

c++ - 这有多线程安全?