将递归函数转换为二进制搜索树中的循环以实现IEnumerable

时间:2019-07-15 15:34:14

标签: c# recursion binary-search-tree ienumerable

我已经使用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方法,该方法存储对其父节点的引用。

非常感谢您的帮助。

0 个答案:

没有答案