题目
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
数据结构
swift
/**
* Definition for a binary tree node.
* public class TreeNode {
* public var val: Int
* public var left: TreeNode?
* public var right: TreeNode?
* public init(_ val: Int) {
* self.val = val
* self.left = nil
* self.right = nil
* }
* }
*/
- 树中节点数目在范围 [2, 105] 内。
- -109 <= Node.val <= 109
- 所有 Node.val 互不相同 。
- p != q
- p 和 q 均存在于给定的二叉树中。
Show me the code
swift
func lowestCommonAncestor(_ root: TreeNode?, _ p: TreeNode?, _ q: TreeNode?) -> TreeNode? {
var result: TreeNode? = nil
func containAnyTarget(_ root: TreeNode?, _ p: TreeNode?, _ q: TreeNode?) -> Bool {
guard root != nil else { return false }
let lson = containAnyTarget(root!.left, p, q)
let rson = containAnyTarget(root!.right, p, q)
if lson == true, rson == true {
result = root
return true
}
if root === p || root === q {
result = root
return true
}
return lson || rson
}
let _ = containAnyTarget(root, p, q)
return result
}