如何在给定特定节点的BST中找到直接较大的元素
How to find the immediate larger element in a BST given a specific node?
我使用的是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,那个么从根开始使用类似搜索的技术。请执行以下操作。沿着树向下移动,如果节点的数据大于根的数据,则转到右侧,否则转到左侧。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 如何在给定特定节点的BST中找到直接较大的元素
- BST 不添加元素
- 删除元素 BST
- 返回 BST 中的第 K 个最小元素
- 如何将元素插入 BST
- 从 BST 中删除元素(指针错误)
- 使用BST的多数元素
- BST 递归解中的第 k 个最小元素
- 时间和空间复杂性在二叉树的每个级别创建元素向量(NON-BST)
- 从BST中删除重复元素
- 中缀,前缀或后缀顺序通过BST得到降序打印元素
- 如何找到BST的某个元素,给定关键字