236. 二叉树的最近公共祖先

68 阅读1分钟

236. 二叉树的最近公共祖先

思路

1 递归从左子节点找p,q 2 递归从右子节点找p,q 3 如果1,2 找到的结果都不为nil,说明p q分别分布在当前root的两侧,返回root 4 如果1结果返回nil,那结果就是2 的结果,如果2 返回的结果是nil, 那结果就是1 找到的结果

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