LeetCode Swift二叉树前序遍历遇TreeNode类型转换错误
问题报错原因及解决方案
报错根因
这个类型转换错误是命名空间下的类型冲突导致的:
- LeetCode Swift判题环境已经内置了全局的
TreeNode类定义,不需要提交者额外实现 - 你本地自定义的
TreeNode类和LeetCode内置的TreeNode属于完全不同的两个类型,判题逻辑传入的内置TreeNode实例无法匹配你代码里要求的自定义TreeNode参数,因此触发报错
解决方法
第一步:删除自定义TreeNode代码
提交到LeetCode的代码里删掉所有你自己写的TreeNode类定义,直接使用平台内置的类型即可。
第二步:提交标准格式的解题代码
参考可直接通过的前序遍历递归实现代码如下:
class Solution { func preorderTraversal(_ root: TreeNode?) -> [Int] { var res = [Int]() dfs(root, &res) return res } private func dfs(_ node: TreeNode?, _ res: inout [Int]) { guard let node = node else { return } res.append(node.val) dfs(node.left, &res) dfs(node.right, &res) } }
本地调试兼容方案
如果需要在本地Playground调试代码,可以给自定义的TreeNode加上DEBUG编译条件宏,避免提交时出现类型冲突:
#if DEBUG public class TreeNode { public var val: Int public var left: TreeNode? public var right: TreeNode? public init() { val = 0; left = nil; right = nil } public init(_ val: Int) { self.val = val; left = nil; right = nil } public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) { self.val = val self.left = left self.right = right } } #endif
测试用例验证
上述代码可覆盖所有要求的测试场景:
- 输入
root = [1,null,2,3]:输出[1,2,3] - 输入空root:输出空数组
- 输入
root = [1]:输出[1]
内容的提问来源于stack exchange,提问作者Vivek Kumar
相关产品推荐
相关产品推荐

