Swift中Adventure结构体如何实现二叉树构建?
拆解Adventure结构体如何构建二叉树
嘿,我来帮你捋明白这个问题!你困惑的点在于:明明教程说这段代码是构建二叉树(每个Page关联两个子Page),但看不出Adventure结构体是怎么做到的对吧?咱们一步步拆解:
首先,先补全你没贴完的代码(这类交互式故事二叉树的常规写法),然后再解释逻辑:
import Foundation // 先补全缺失的Story基础类型 struct Story { let text: String } class Page { let story: Story // Choice是一个元组,包含选项标题和对应的下一个Page typealias Choice = (title: String, nextPage: Page) // 每个Page最多两个选项,对应二叉树的左右两个子节点 let choices: [Choice] init(story: Story, choices: [Choice]) { self.story = story self.choices = choices } } // 这是Adventure结构体的典型实现 struct Adventure { // 持有整个二叉树的根节点(冒险的起始页) let rootPage: Page // 初始化方法就是用来组装整个二叉树的地方 init() { // 1. 先创建最底层的「叶子节点」——没有子页面的结局页 let happyEnding = Page(story: Story(text: "你找到了宝藏,过上了富足的生活!"), choices: []) let badEnding = Page(story: Story(text: "你掉进了陷阱,探险结束。"), choices: []) // 2. 创建中间节点:每个节点的choices对应两个子Page,形成二叉分支 let caveJunctionPage = Page( story: Story(text: "你来到洞穴入口:左边是发光通道,右边是黑暗隧道。"), choices: [ ("走左边发光通道", happyEnding), ("走右边黑暗隧道", badEnding) ] ) // 3. 创建根节点(冒险的起点) let startPage = Page( story: Story(text: "你站在森林边缘,前方有一条通往洞穴的路。"), choices: [("前往洞穴", caveJunctionPage)] // 如果是严格二叉树,这里可以再加第二个选项,比如("原路返回", anotherPage) ) // 把根节点赋值给Adventure,整个二叉树就构建完成了 self.rootPage = startPage } }
核心逻辑对应关系
- 二叉树节点 = Page类:每个Page就是二叉树里的一个节点,存储自己的内容(story)。
- 二叉树的分支 = Page的choices:每个Page的
choices数组里的两个元素(严格二叉树会固定两个),分别对应二叉树的左子节点和右子节点——通过nextPage引用关联起来。 - Adventure的作用 = 二叉树的构建器:它本身不实现二叉树的算法逻辑,而是负责从下到上组装所有Page节点,最后持有整个树的根节点(rootPage),这样整个二叉树的结构就通过Page之间的引用串起来了。
举个直观的结构例子:
startPage(森林边缘) └─ caveJunctionPage(洞穴入口) ├─ happyEnding(宝藏结局) └─ badEnding(陷阱结局)
这样整个结构就是一个二叉树啦——每个中间节点最多有两个子节点,完美对应你说的“一个Page关联两个Page”的需求。
内容的提问来源于stack exchange,提问作者Curt Rand
相关产品推荐
相关产品推荐

