我一般对Swift和编程都不熟悉,我的目标是通过每天左右执行leetcode或hackerrank问题来使它变得更好。我一直在寻找“二叉树的最低共同祖先”这个问题,并且想了解如何在Swift中做到这一点。我已经阅读了其他有关如何在Java和Python中执行此操作的链接,但是我似乎并没有完全掌握该解决方案,因为它不是使用这些语言编写的。我尝试专门在Swift中使用Google解决方案,但结果空荡荡。
我在这里阅读了以下链接:
-Swift中二叉树的基础知识:https://www.raywenderlich.com/1053-swift-algorithm-club-swift-tree-data-structure
-链接到这里的问题:https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/
-有人实际上在这里提出了解决方案,但是我在理解它的工作方式时遇到了麻烦:https://github.com/wty21cn/leetcode-swift/blob/master/leetcode-swift/Easy/q235-lowest-common-ancestor-of-a-binary-search-tree.swift
我试图通过gitHub链接调整解决方案2,但它对我不起作用。
谢谢您的时间。尽管该解决方案已经发布,但我想了解为什么要用这种方式编写该解决方案,以及可以做些什么来使其更加高效。
class TreeNode<T> {
var val: T
var left: Int
var right: Int
init(val: T) {
self.val = val
}
func lowestCommonAncestor(_ root: TreeNode, _ p: TreeNode, _ q: TreeNode) -> TreeNode {
var node: TreeNode? = root
var val: T
while node != nil {
if node!.val < p.val && node!.val < q.val {
node = node!.right
} else if node!.val > p.val && node!.val > q.val {
node = node!.left
} else {
return node!
}
}
return node!
}
}
示例输入:
let root = [3,5,1,6,2,0,8,nil,nil,7,4]
let p = 5, q = 1