我正在编写一个函数,如果进行中序遍历,它会返回树的下一个节点来自任何节点的内容。该函数有一个可选的返回值,如果没有下一个节点(即我们在最后一个节点),则需要返回值。我从函数返回一个可选的和非可选的,并且在这两个地方都有编译器错误。这是代码:
class TreeNode<T>
{
var leftChild : TreeNode?
var rightChild : TreeNode?
var parent : TreeNode?
var value : T
init(withValue:T) {
self.value = withValue
}
func nextInOrderNode<T>() -> TreeNode<T>?
{
if var nextNode = rightChild
{
while nextNode.leftChild != nil {
nextNode = nextNode.leftChild!
}
return nextNode //error 1
}
else
{
var nextNode = parent
var currentNode = self
while nextNode?.rightChild !== currentNode {
currentNode = nextNode!
nextNode = nextNode?.parent
}
return nextNode //error 2
}
}
}
错误是:
error 1: Cannot convert return expression of type 'TreeNode<T>' to return type 'TreeNode<T>?'
error 2: Cannot convert return expression of type 'TreeNode<T>?' to return type 'TreeNode<T>?'
我不确定我在这里做错了什么,因为从我所看到的情况来看,这似乎应该可行。任何帮助将不胜感激。
最佳答案
问题与可选返回值和非可选返回值无关。 在
func nextInOrderNode<T>() -> TreeNode<T>?
你引入了一个新的占位符类型 T
, 在这个方法的本地,
这与占位符类型无关(并隐藏)T
在 class TreeNode<T>
.
解决方法很简单: 只需删除方法声明中的占位符:
func nextInOrderNode() -> TreeNode<T>?
这里不需要它,因为 T
的范围在 class TreeNode<T>
是整个类定义,包括所有方法。
关于ios - 可选和非可选不能从返回可选的函数返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35471413/