关于go:Leetcode专题236二叉树的最近公共祖先

9次阅读

共计 503 个字符,预计需要花费 2 分钟才能阅读完成。

力扣链接:
https://leetcode.cn/problems/lowest-common-ancestor-of-a-bina…
解题思路:
应用递归的形式进行后序遍历,当遍历到某个节点时,别离递归查找它的左右子树,如果左子树和右子树都返回非空值,则阐明以后节点就是 p 和 q 的最近公共先人,间接返回以后节点。如果左子树返回的值为空,则阐明 p 和 q 都在右子树中,间接返回右子树返回的值。如果右子树返回的值为空,则阐明 p 和 q 都在左子树中,间接返回左子树返回的值。最终,递归完结后返回的节点即为 p 和 q 的最近公共先人

 func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode {
    if root == p || root == q || root == nil {return root}
    left := lowestCommonAncestor(root.Left, p, q)
    right := lowestCommonAncestor(root.Right, p, q)
    if left != nil && right != nil {return root} 
    if left == nil {return right}
    return left
}
正文完
 0