You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift:如何不使用join或高阶函数按层级打印树形结构?

不依赖join或高阶函数的Swift树形结构层级打印实现

嘿,我来帮你搞定这个不使用join方法或高阶函数的树形结构打印需求!我们可以通过递归+手动字符串拼接+层级缩进跟踪来实现,完全贴合你的要求。

首先,先修正原TreeNode类里的小冗余(移除了add方法里不必要的print(children)),然后给出完整的扩展实现:

完整代码实现

class TreeNode<T>{
    weak var parent: TreeNode?
    var children: [TreeNode] = []
    var value: T
    
    init(value: T){ 
        self.value = value 
    }
    
    func add(_ child: TreeNode){ 
        self.children.append(child) 
        child.parent = self 
    }
}

extension TreeNode{
    // 对外的无参入口方法,默认从根层级(0级)开始打印
    func printTree() -> String {
        return printTree(withLevel: 0)
    }
    
    // 内部递归方法,跟踪当前节点的层级,用于生成缩进
    private func printTree(withLevel level: Int) -> String {
        // 生成当前层级的缩进:这里用2个空格代表一层,也可以换成树形符号优化视觉效果
        let indent = String(repeating: "  ", count: level)
        var nodeString = "\(indent)\(value)\n"
        
        // 用普通for-in循环遍历子节点,手动拼接每个子节点的打印结果
        // 完全没有使用join或高阶函数(map/flatMap等)
        for child in children {
            nodeString += child.printTree(withLevel: level + 1)
        }
        
        return nodeString
    }
}

代码说明

  • 递归层级跟踪:我们新增了私有递归方法printTree(withLevel:),通过level参数记录当前节点的层级,以此生成对应的缩进,保证树形结构的层级感。
  • 手动字符串拼接:遍历子节点时使用普通的for-in循环,逐个将子节点的打印结果拼接到总字符串中,完全避开了join方法和高阶函数。
  • 可定制的缩进样式:如果你想要更直观的树形视觉效果,可以修改缩进的生成逻辑,比如:
    private func printTree(withLevel level: Int) -> String {
        var indent = ""
        if level > 0 {
            // 用竖线和横线组合出树形分支
            indent = String(repeating: "|  ", count: level - 1) + "└──"
        }
        var nodeString = "\(indent)\(value)\n"
        
        for child in children {
            nodeString += child.printTree(withLevel: level + 1)
        }
        
        return nodeString
    }
    

使用示例

// 构建测试树形结构
let root = TreeNode(value: "Root")
let child1 = TreeNode(value: "Child1")
let child2 = TreeNode(value: "Child2")
let grandchild1 = TreeNode(value: "Grandchild1")
let grandchild2 = TreeNode(value: "Grandchild2")

root.add(child1)
root.add(child2)
child1.add(grandchild1)
child1.add(grandchild2)

// 打印树形结构
print(root.printTree())

普通缩进版本输出:

Root
  Child1
    Grandchild1
    Grandchild2
  Child2

树形符号版本输出:

Root
└── Child1
    └── Grandchild1
    └── Grandchild2
└── Child2

内容的提问来源于stack exchange,提问作者mfaani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:28:19