swift - swift 结构二叉树

标签 swift data-structures tree binary-tree

我试图在 struct 的帮助下制作一个二叉树,如下所示:

struct BinaryTree {
    var value: Int
    var left: BinaryTree
    var right: BinaryTree 
}

但我收到错误错误:值类型“BinaryTree”不能具有递归包含它的存储属性。 这里的结构是值类型,所以我不能在其中创建相同的结构对象。

我怎样才能做到这一点???

最佳答案

Structs 是值类型,这就是递归不起作用的原因。您必须改用 Class,因为它们是引用类型。 但是正如您所说,您想要一个具有值类型的解决方案。这是使用 enum

的解决方案

具有间接 情况的枚举分配在堆上,因此仅包含指向递归子项的指针。 如果没有指针间接,类型将无限大,因为它包含无限多次。

enum BinaryTree<Element: Comparable> {
    case empty
    indirect case node(value: Element, left: BinaryTree<Element>, right: BinaryTree<Element>)
}

extension BinaryTree {
    func addNode(_ newValue: Element) -> BinaryTree<Element> {
        switch self {
        case .empty:
            return BinaryTree.node(value: newValue, left: .empty, right: .empty)
        case let .node(value, left, right):
            if newValue < value {
                return BinaryTree.node(value: value, left: left.addNode(newValue), right: right)
            } else {
                return BinaryTree.node(value: value, left: left, right: right.addNode(newValue))
            }
        }    
    } 
}

let tree = BinaryTree<Int>.empty.addNode(2)

你只需使用 Class

您可以为该结构使用类,结构不允许引用自身。

class BinaryTree {
    var value: Int
    var left: BinaryTree?
    var right: BinaryTree?
    init(value: Int) {
        self.value = value
    }
}

我希望这对你有用。

关于swift - swift 结构二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49399089/

相关文章:

c++ - 合并两个堆的算法

linux - 检查目录树中文件时间戳的快速方法

python - 不使用类/对象递归创建树层次结构

c - Swift 与 C 结构指针

ios - 在应用程序生命周期的另一个时间请求远程通知授权?

java - 为什么我的所有 BST 遍历都按顺序返回值?

r - 如何使用 gridGraphics 转换分类 TreeMap

swift - 我如何剖析/传播带有数组的字典?

swift - "Cannot convert value of type ' AVAudioPlayer.类型 ' to expected argument type"

c# - 如何根据第二个参数进行排序