31 lines
481 B
Go
31 lines
481 B
Go
package q236
|
|
|
|
type TreeNode struct {
|
|
Val int
|
|
Left *TreeNode
|
|
Right *TreeNode
|
|
}
|
|
|
|
func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode {
|
|
if root == nil {
|
|
return nil
|
|
}
|
|
if root == p || root == q {
|
|
return root
|
|
}
|
|
|
|
l := lowestCommonAncestor(root.Left, p, q)
|
|
r := lowestCommonAncestor(root.Right, p, q)
|
|
|
|
switch {
|
|
case l == nil && r == nil:
|
|
return nil
|
|
case l != nil && r != nil:
|
|
return root
|
|
case l != nil:
|
|
return l
|
|
}
|
|
return r
|
|
}
|
|
|
|
var _ = lowestCommonAncestor
|