我需要一个算法来返回某个任意节点的后继节点 给定二叉搜索树。
答案 0 :(得分:5)
为您提供与您的问题具有相同详细程度的答案:继续往右走,然后离开,直到您到达一片叶子。
答案 1 :(得分:1)
有两种通用方法:
答案 2 :(得分:0)
在下降树时需要保持zipper。拉链只是您遍历的节点的列表,并且每个都指示您下次是向左还是向右。 即使没有从孩子到父母的任何指示,它也允许你在树上旅行。
继承人的算法是,只要你从左边来,然后再向右走,然后下降到最左边的孩子,就可以返回(在拉链中)。
数字更容易......
答案 3 :(得分:0)
节点的后继者意味着您正在寻找一个顺序继承者。 以下方法可帮助您确定顺序继承者没有任何父母节点或额外空间不可再生
struct node * inOrderSuccessor(struct node *root, struct node *n)
{
//*If the node has a right child, return the smallest value of the right sub tree*
if( n->right != NULL )
return minValue(n->right);
//*Return the first ancestor in whose left subtree, node n lies*
struct node *succ=NULL;
while(root)
{
if(n->datadata < root->data)
{
succ=root; root=root->left;
}
else if(n->data > root->data)
root=root->right;
else break;
}
return succ;
}
我很确定这是对的。如果我错了,请纠正我。谢谢。