如何解决Swift中的“二叉树的最低共同祖先”?

时间:2019-07-17 20:06:15

标签: swift

我一般对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

0 个答案:

没有答案