LeetCode 236
題目鏈接:二叉樹的公共祖先
首先要想到的是:如果p届囚、q兩個節(jié)點分別位于當(dāng)前節(jié)點的左右子樹中永丝,那么當(dāng)前節(jié)點就是p和q的公共父節(jié)點
后序遍歷(左右中)就是天然的回溯過程浪读,可以根據(jù)左右子樹的返回值,來處理中節(jié)點的邏輯
這題沒做出來的主要原因就是胆建,不知道怎么處理遞歸值,在這種情況下,需要處理遞歸返回值,根據(jù)左右子樹的返回值灰粮,來處理中節(jié)點的邏輯
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;
}
關(guān)于遞歸返回值的總結(jié):