所以我有一个问题,我有解决这个问题的算法,但是我似乎无法将其转换为C语言中的代码。
问题:给定一个AVL树,返回不在树中的下一个最小自然值。
示例:如果树中的最小值为2,则应确定3是否为树中的节点之一,如果不是,则应返回值3,如果为3,则应看到如果树上有4,依此类推...
O(logn)中有效的问题的算法(当n是在树中找到的节点数时):
首先,我们检查node-> size = node-> key-TreeMinimum 如果是,请转到树的右侧。 如果否,则转到左侧。 当我们达到NULL时,我们应该返回我们访问的最后一个节点的值加1。 节点的大小是该节点下的节点数,包括节点本身。 我用c语言编写了此代码,但似乎不起作用:
int next_missing( AVLNodePtr tnode )
{
int x,y;
if(tnode==NULL)
{
return (tnode->key)+1;
}
if(tnode->size == tnode->key - FindMin(tnode))
x = next_missing(tnode->child[1]);
if(tnode->size != tnode->key - FindMin(tnode))
y = next_missing(tnode->child[0]);
if(x>y) return y;
else return x;
}
任何有关如何修复代码的帮助/提示都将不胜感激。 谢谢。