【发布时间】:2011-10-23 18:05:31
【问题描述】:
我一直在尝试在我的 BSTree 类中实现一个 Contains 方法,该方法将接受一个值,然后检查所有节点以查看它是否包含在树中。我认为该算法是正确的,但我不知道为什么我在第一个 if 语句中不断收到 StackOverFlowException。有什么想法吗?
public Boolean Contains(T item)
{
Node<T> node = root;
return contains(root, item);
}
private Boolean contains(Node<T> node, T item)
{
if (item.CompareTo(root.Data) == 0)
{
return true;//return 0 if found
}
else
{
if (item.CompareTo(root.Data) > 0)
{
//root = node.Left;
Node<T> left = root.Left;
return(contains(root, item));
}
else
{
if (item.CompareTo(root.Data) < 0)
{
//root = node.Right;
Node<T> right = root.Right;
return(contains(root, item));
}
else
{
return false;//return 1 if not found
}
}
}
}
【问题讨论】:
-
我对 Contains() 和其他一些部分感到困惑。为什么将 root 分配给节点,然后使用 root 进行 contains() 调用?该节点的副本从未使用过。看起来您的递归不会在所有情况下都终止(因此 StackOverflowException)。如果你到达一个空叶节点但没有找到匹配项怎么办?
-
@mwd(看起来你的递归不会终止)。什么是解决方案!
标签: c# algorithm exception tree binary-search-tree