题目链接:LeetCode 236. 二叉树的最近公共祖先
题意:
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
解题思路:
- 利用二叉树的后序遍历回溯(从下往上遍历)的思想,依次遍历整个二叉树,
- 在遍历过程中,遇到 P 就返回p的父节点,遇到 q 就返回 q 的父节点,(也就是找到了p,q各自的祖先)
- 然后判断:
- 情况一:公共祖先是 p 或 q,此时直接返回该节点
- 情况二:常规的公共祖先,此时左右子树如果都有,就返回根节点,否则返回存在的子树(左右子树均为空的情况就是返回空。)
代码:
// 递归的参数和返回值
func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode {
if root == nil {
return nil
}
// 递归的边界
if root == p || root == q ||root == nil{ //找到p,q 节点就返回
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 left
}
return right
}
标签:return,nil,祖先,节点,二叉树,236,root,LeetCode
From: https://www.cnblogs.com/lxing-go/p/17526825.html