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

How to find the immediate larger element in a BST given a specific node?

本文关键字:元素 BST 节点      更新时间:2023-10-16

我使用的是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,那个么从根开始使用类似搜索的技术。请执行以下操作。沿着树向下移动,如果节点的数据大于根的数据,则转到右侧,否则转到左侧。