【发布时间】:2019-10-30 21:59:42
【问题描述】:
我正在使用 BST。给定一个特定节点,如何在树中找到直接较大的元素?
【问题讨论】:
-
您的问题是特定于 c++ 代码的吗? (因为你标记了它)。在这种情况下,请提供最少的代码、您的确切问题以及您尝试过的内容。如果您的问题更笼统,答案在于了解 BST 是什么。
我正在使用 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,则从根开始并使用类似搜索的技术。做以下。 沿着树向下移动,如果一个节点的数据大于根的数据,则向右走,否则向左走。
【讨论】: