我已经使用c#实现了一个整数的二进制搜索树,现在我想做的是使其可枚举,以便在其上使用foreach循环。
在我的研究中,我能够找到以下代码,该代码以升序检索所有整数并将其添加到列表中:
private void getValues(Node currentNode, List<int> intList){
// get value from left branch
getValues(currentNode.Left, intList);
// add value from current node
intList.Add(currentNode.Value);
// get value from right branch
getValues(currentNode.Right, intList);
}
通过调用getValues(this.root,myIntList),我得到了一个排序的整数列表。然后,我尝试将其转换为IEnumerator以便在GetEnumerator()方法中使用:
public IEnumerator<int> GetEnumerator()
{
yield return getValues(this.root).Current;
}
private IEnumerator<int> getValues(Node currentNode)
{
// get value from left branch
yield return getValues(currentNode.Left).Current;
// return value from current node
yield return currentNode.Value;
// get value from right branch
yield return getValues(currentNode.Right).Current;
}
但是那没有用。我发现IEnumerator接口不喜欢递归。
我正在尝试将此递归函数转换为使用while循环的函数,但未成功。所以我的问题是:是否可以将递归方法与GetEnumerator方法一起使用?有没有可行的方法可以将递归转换为循环?
我知道我可以使用递归来获取整数的通用列表,而不是在GetEnumerator方法中将其与循环结合使用以产生返回结果,但这不是我想要的实现方式。
为了记录,Node对象具有一个Parent方法,该方法存储对其父节点的引用。
非常感谢您的帮助。