LeetCode 236
题目链接:二叉树的公共祖先
首先要想到的是:如果p、q两个节点分别位于当前节点的左右子树中,那么当前节点就是p和q的公共父节点
后序遍历(左右中)就是天然的回溯过程,可以根据左右子树的返回值,来处理中节点的逻辑
这题没做出来的主要原因就是,不知道怎么处理递归值,在这种情况下,需要处理递归返回值,根据左右子树的返回值,来处理中节点的逻辑
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root==null||root.val==p.val||root.val==q.val) return root;
TreeNode left = lowestCommonAncestor(root.left, p, q);
TreeNode right = lowestCommonAncestor(root.right, p, q);
if(left!=null&&right!=null) return root;
else if(left==null&&right!=null) return right;
else if(left!=null&&right==null) return left;
else return null;
}
关于递归返回值的总结: